简体   繁体   中英

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

I'm trying to fetch two entities eg: Student with email attribute and Professor, both of have same parent entity eg: Person with attributes entityId, firstName and lastName i want to generate them in two sections using NSFetchedResultsController . Here is a part from getter for 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];

All Students have the same entityId and all Professors too

In tableView I have two prototype cells one for Student and another for Professor . 它看起来像这样

I get two sections as expected but students are in different sections, i have printed all objects from fetchedResultsController in console like this, po [self.fetchedResultsController objectAtIndexPath: [NSIndexPath indexPathForItem:1 inSection:1]] all professors are printed with fault :

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

I have forced the fetch request to return full objects using [request setReturnsObjectsAsFaults:NO] but it had no effect.

Why is it happening so?

To avoid "data fault" issue you should set this field of NSFetchRequest:

request.returnsObjectsAsFaults = NO;

To separate students from professors in two sections you can use multiple NSFetchedResultsControllers, as described here: https://stackoverflow.com/a/2309855/1689376

To avoid duplication of your code, just create a method like this and call it twice:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM