CoreData:使用 IN 基于谓词/数组进行排序
Posted
技术标签:
【中文标题】CoreData:使用 IN 基于谓词/数组进行排序【英文标题】:CoreData: sort based on predicate/array using IN 【发布时间】:2012-01-13 21:07:34 【问题描述】:我有一个 CoreData 存储,并希望维护 REST 服务提供的排序顺序。 CoreData 中的对象具有guid
属性,并且对 REST 提供的数组(GUID)进行了排序。从 CoreData 获取对象后,我想保持这种排序。
我在 fetch 中使用以下 NSPredicate
:
[NSPredicate predicateWithFormat:@"guid IN %@", wishlistGUIDs];
wishlistGUIDs 是 REST 提供的相关对象的 GUID 数组。
有没有办法在保持wishlistGUIDs
顺序的同时获取结果?我已经探索过使用NSSortDescriptor
,并通过迭代wishlistGUIDs
来组装一个疯狂的排序描述符数组,但它似乎过于复杂而且只是“错误”。
【问题讨论】:
【参考方案1】:你能把自己限制在 ios 5/Lion 上吗?这看起来像是有序关系的一个很好的用例(以NSOrderedSet
的形式出现)。您将拥有一个包含有序 GUID 的核心数据实体“愿望清单”。
除此之外,我认为您将不得不做一些丑陋的事情,例如为 GUID 列表维护自己的序列号。
【讨论】:
【参考方案2】:这是我为解决同一类型问题而采取的额外步骤:
定义方法:
NSInteger gidSort(Guild* num1, Guild* num2, void *context)
NSArray* wishlistGUIDs = (NSArray*)context;
int v1 = [wishlistGUIDs indexOfObject:num1.guid];
int v2 = [wishlistGUIDs indexOfObject:num2.guid];
if (v1 < v2)
return NSOrderedAscending;
else if (v1 > v2)
return NSOrderedDescending;
else
return NSOrderedSame;
那么在你从 fetch 中得到结果之后:
NSArray* resorted = [results sortedArrayUsingFunction:gidSort context:wishlistGUIDs];
【讨论】:
以上是关于CoreData:使用 IN 基于谓词/数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章