如何使用关系值获取核心数据不同值?
问题描述:
我想获得所有不同的身份值(联系人有很多身份)。我也尝试从联系人模型中获取contact.sectionIndex。我正在尝试下面的代码,并获取每个记录的部分名称关键路径“Contact.sectionIndex'”返回nil值。如何使用关系值获取核心数据不同值?
NSFetchRequest *req = NSFetchRequestMake(@"Identity", managedObjectContext);
req.fetchBatchSize = 20;
req.sortDescriptors = NSSortDescriptors1(@"sortname", YES);
[req setResultType:NSDictionaryResultType];
[req setReturnsDistinctResults:YES];
[req setPropertiesToFetch:@[@"identityID", @"sortname"]];
// Create & return the fetchedResultsController.
fetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext
sectionNameKeyPath:@"contact.sectionIndex" cacheName:nil];
[VenmoUtilities performFetch:fetchedResultsController critical:NO];
答
用作sectionNameKeyPath
的属性必须包含在propertiesToFetch
:
[req setPropertiesToFetch:@[@"identityID", @"sortname", @"contact.sectionIndex"]];
答
从苹果的文档,你可以看到你可以要求从请求太多。
讨论
属性描述可以表示属性,一对一关系或表达式。属性或关系描述的名称必须与获取请求的实体上的描述名称相匹配。
当我这样做,我得到''NSInvalidArgumentException',原因:' - [NSKnownKeysDictionary1联系人]:无法识别的选择器发送到实例“ – mergesort
@angrymonkey:现在它工作吗? –
所以它的工作原理,但我希望结果是唯一的identityID。新的属性是[req setPropertiesToFetch:@ [@“identityID”,@“sortname”,@“contact.sectionIndex”,@“contact.name]]; 有效地,我不想重复identityID值,无论是不是联系人的名字是相同的,现在它获得唯一的身份ID值,但只有每个联系人我希望它,如果有不同名称的联系人,但身份ID相同,它只会返回一个,是吗? – mergesort