2012-01-13 11 views
2

私はCoreDataストアを持っており、RESTサービスが提供するソート順を維持しようとしています。 CoreDataのオブジェクトには​​属性があり、(GUIDの)REST提供の配列がソートされます。 CoreDataからオブジェクトをフェッチした後、このソートを維持したいと思います。CoreData:INを使用して述語/配列に基づくソート

私は、次のNSPredicateを使用しています私のフェッチ:

wishlistGUIDsは、関連するオブジェクトのGUIDのRESTが提供する配列である

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

wishlistGUIDsの順番を維持している間に結果を取得する方法はありますか?私はNSSortDescriptorを使って探索し、wishlistGUIDsを反復して狂気のソート記述子配列をアセンブルしましたが、それはあまりにも複雑でちょうど間違っているようです。

答えて

0

自分自身をiOS 5/Lionに制限できますか?これは順序関係(これはNSOrderedSetとして出てくる)の良いユースケースのようです。順序付けられたGUIDを含むコアデータエンティティ「ウィッシュリスト」があります。

これを除いて、GUIDのリストの独自のシーケンス番号を維持するなど、醜い何かをしなければならないと思います。ここで

0

私は問題のこの同じタイプを解決するためにかかった余分なステップです:

NSArray* resorted = [results sortedArrayUsingFunction:gidSort context:wishlistGUIDs]; 
:あなたはフェッチから結果を取得した後、次に

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

:メソッドを定義

関連する問題