如何使用关系值获取核心数据不同值?

问题描述:

我想获得所有不同的身份值(联系人有很多身份)。我也尝试从联系人模型中获取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"]]; 
+0

当我这样做,我得到''NSInvalidArgumentException',原因:' - [NSKnownKeysDictionary1联系人]:无法识别的选择器发送到实例“ – mergesort

+0

@angrymonkey:现在它工作吗? –

+0

所以它的工作原理,但我希望结果是唯一的identityID。新的属性是[req setPropertiesToFetch:@ [@“identityID”,@“sortname”,@“contact.sectionIndex”,@“contact.name]]; 有效地,我不想重复identityID值,无论是不是联系人的名字是相同的,现在它获得唯一的身份ID值,但只有每个联系人我希望它,如果有不同名称的联系人,但身份ID相同,它只会返回一个,是吗? – mergesort

从苹果的文档,你可以看到你可以要求从请求太多。

讨论

属性描述可以表示属性,一对一关系或表达式。属性或关系描述的名称必须与获取请求的实体上的描述名称相匹配。