簡體   English   中英

核心數據不返回完整的對象,數據:<fault>

[英]Core data don't return full objects, data: <fault>

我想取兩個實體如:與學生email attribute和教授,兩者具有相同的父實體如:人與attributes entityId, firstName and lastName我想生成他們使用兩個部分NSFetchedResultsController 這是fetchedResultsController getter 的fetchedResultsController

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

[fetchRequest setFetchBatchSize:20];
[fetchRequest setReturnsObjectsAsFaults:NO];

NSEntityDescription *description = [NSEntityDescription entityForName:@"Person"
                                               inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:description];

NSSortDescriptor *firstNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES];
NSSortDescriptor *lastNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES];
[fetchRequest setSortDescriptors:@[firstNameDescriptor, lastNameDescriptor]];

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc]
                                                         initWithFetchRequest:fetchRequest
                                                         managedObjectContext:self.managedObjectContext
                                                           sectionNameKeyPath:@"entityId"
                                                                    cacheName:nil];

所有Students都有相同的entityId和所有Professors

在 tableView 中,我有兩個原型單元格,一個用於Student ,另一個用於Professor 它看起來像這樣

我按預期得到兩個部分,但學生在不同的部分,我已經在控制台中打印了fetchedResultsController中的所有對象, po [self.fetchedResultsController objectAtIndexPath: [NSIndexPath indexPathForItem:1 inSection:1]]所有教授都打印fault

<Professor: 0x6080000befc0> (entity: Professor; id: 0xd0000000001c0002 <x-coredata://03A3ECAD-CCA7-424E-86F9-258D25372BA1/Professor/p7> ; data: <fault>)

我已經強制獲取請求使用[request setReturnsObjectsAsFaults:NO]返回完整對象,但它沒有效果。

為什么會這樣?

為了避免“數據錯誤”問題,你應該設置 NSFetchRequest 的這個字段:

request.returnsObjectsAsFaults = NO;

要將學生與教授分為兩個部分,您可以使用多個 NSFetchedResultsControllers,如下所述: https : //stackoverflow.com/a/2309855/1689376

為避免重復您的代碼,只需創建一個這樣的方法並調用它兩次:

- (NSFetchedResultsController) createFetchedResultsController: (NSString *)  entityName {
 //move your code here
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM