NSFetchedResultsController:保持与IN谓词相同的排序顺序

时间:2013-01-04 13:02:52

标签: core-data nsfetchedresultscontroller nsfetchrequest

我有一个uid列表,我需要使用这些uid获取Core Data对象:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"uid IN %@", uids];
[request setPredicate:predicate];

现在,我希望保持对象的顺序与列出的uid相同。因此,如果数组是[3,1,2],那么我希望返回的对象也按顺序排列。

不设置排序描述符不是NSFetchedResultsController的选项,那么我应该将排序描述符设置为什么?

2 个答案:

答案 0 :(得分:0)

可以在NSFetchRequest实例上设置排序描述符。

[request setSortDescriptors:descriptors];

其中descriptorsNSSortDescriptor个实例的数组。

可以按如下方式创建NSSortDescriptor

NSSortDescriptor *sortDescriptorForKey = [[NSSortDescriptor alloc] initWithKey:@"someKey" ascending:YES]; // YES or NO based on your needs

关于您的问题,uids的顺序是什么?根据我的经验(直到现在我还没有想到这一点)你不能做你想要达到的目标。无论如何,您只需复制uidsNSFetchRequest的描述符。

也许有人可以有其他想法。

答案 1 :(得分:0)

持久性存储中的对象是无序的。通常,您应该根据创建日期等属性在控制器或视图层强制执行订单。如果您的数据中存在固有的订单,则需要明确对其进行建模。(https://developer.apple.com/library/mac/documentation/cocoa/conceptual/coredata/articles/cdFAQ.html