2012-01-13 79 views
2

我有一个CoreData存储,并且希望维护一个由REST服务提供的排序顺序。 CoreData中的对象具有​​属性,并且对REST提供的(GUID)数组进行排序。我想在从CoreData中获取对象之后保持这种类型。CoreData:基于使用IN的谓词/数组进行排序

我使用以下NSPredicate我取:

[NSPredicate predicateWithFormat:@"guid IN %@", wishlistGUIDs];

其中wishlistGUIDs是对的GUID相关对象的REST提供的阵列。

有没有办法在保持wishlistGUIDs顺序的同时获取结果?我已经探索了使用NSSortDescriptor,并通过遍历wishlistGUIDs来组装一个疯狂的排序描述符数组,但它看起来过于复杂并且只是“错误的”。

回答

0

你能限制自己到iOS 5/Lion吗?这对于一个有序的关系看起来很好用(作为NSOrderedSet出现)。你将有一个核心数据实体“愿望清单”,其中将包含有序的GUID。除了这个,我认为你必须做一些丑陋的事情,比如维护你自己的GUID列表序列号。

0

这里是额外的步骤,我把解决这一相同类型的问题:

定义的方法:

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; 
} 

然后你从提取后的结果:

NSArray* resorted = [results sortedArrayUsingFunction:gidSort context:wishlistGUIDs]; 
相关问题