2016-10-07 54 views
1

我想取两个实体,例如:学生与emailattribute和教授,两者具有相同的父实体如:人与attributesentityId, firstName and lastName我要生成它们两节使用NSFetchedResultsController。 这里是吸气剂一部分fetchedResultsController核心数据不返回完整对象,数据:<fault>

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,另一个用于ProfessorIt looks smth like this

,我得到两个部分预期,但学生在不同的部分,我已经印在这样的控制台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]获取请求返回完整对象,但它没有效果。

为什么会这样呢?

+0

发生了什么事ns如果您尝试获取这些对象的其中一个属性的值,而不是仅打印该对象? –

+0

在实际尝试使用获取实体的任何字段之前,核心数据不会加载所有数据是很正常的。 – alexburtnik

+0

如果我在代码NSLog(@“%@”,profesor.firstName)中打印它们;它打印 – astrolka

回答

1

为了避免“数据断层”问题,您应该设置NSFetchRequest的这个领域:

request.returnsObjectsAsFaults = NO; 

要分开教授学生分为两个部分,你可以使用多个NSFetchedResultsControllers,如下所述: https://stackoverflow.com/a/2309855/1689376

为避免重复您的代码,只需创建一个像这样的方法并调用它两次:

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