NSFetchedResultsController返回具有唯一属性的对象

时间:2014-06-30 14:36:18

标签: cocoa-touch core-data nsfetchedresultscontroller

我有一个正确的设置NSFetchedResultsController,它返回我想要的所有对象。但是,我想设置它以便它只返回ID值唯一的对象,因为有几个重复的对象在数据库中具有相同的ID但其他不同的属性。

我试着按照文档说的那样进行设置,最后得到了这个结果:

fetchRequest.returnsDistinctResults = YES;
fetchRequest.propertiesToFetch = @[@"eventCategoryID", @"eventName", @"eventID", @"eventPeopleCount", @"eventPrice", @"eventCrewCount", @"eventStartDateTS", @"eventImageURL", @"shouldShowFriends", @"isLiked"];

但是他们说你必须只使用NSDictionaryResultType这个属性。而且,它给了我一个奇怪的崩溃。

有哪些方法可以使NSFetchedResultsController返回的对象进行过滤,以便拥有ID等自定义唯一属性?

1 个答案:

答案 0 :(得分:1)

所以你想找到ID属性唯一的所有对象?那么是的,NSDictionaryResultType是要走的路。不过,我认为你需要两次。

首先,构建一个获取请求以检索所有ID值,并计算每个值的计数。使用NSExpressionDescription将@count函数应用于结果,并使用NSDictionaryResultType。按ID分组。一步一步的例子是http://mattconnolly.wordpress.com/2012/06/21/ios-core-data-group-by-and-count-results/

现在,您将拥有一个字典,其中包含ID的密钥和ID的计数。过滤该字典,以便您只有ID s,其中计数为1,并仅提取那些ID值。现在,您可以根据ID IN ...单个ID数组生成第二个获取请求。

有可能构建一个更复杂的原始提取请求,只返回count = 1 ID s。