【发布时间】:2017-02-16 17:59:35
【问题描述】:
我正在尝试获取两个实体,例如:emailattribute 的学生和教授,它们都有相同的父实体,例如:attributesentityId, firstName and lastName 的人我想使用 @ 在两个部分中生成它们987654328@。
这是fetchedResultsController的getter的一部分
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] 强制获取请求返回完整对象,但没有效果。
为什么会这样?
【问题讨论】:
-
如果您尝试获取这些对象的属性之一的值,而不是仅仅打印该对象,会发生什么?
-
在您实际尝试使用获取的实体的任何字段之前,核心数据不会加载所有数据是正常的。
-
如果我在代码中打印它们 NSLog(@"%@", profesor.firstName);它打印
-
请参阅this answer 了解故障说明。要将学生与教授分开,您需要添加
entityId作为另一个(第一个)排序描述符。 -
完全正确 - 您需要按 entityId 进行排序,以确保学生与教授分开。当前,您的排序描述符指定 firstName 和 lastName。因此,Charlie Dean 教授将在学生 Alex Brown 之后,但在学生 Eli Frost 之前。因此混合。
标签: ios objective-c iphone core-data