2012-04-12 13 views
0

階層構造を含むHTMLリクエストからJSONオブジェクトを取得します。 JSONオブジェクトからコアデータ - 親/子階層のソート記述子

サンプル:オブジェクトは、親/子でソートされているように、私はフェッチ要求(ソート)を定義する方法を、私はちょうど1つのエンティティに同じ方法でそれを保存し

{ 
    "_id": "4f870f064f95ae0da8000002", 
    "name": "Category", 
    "parent_id": null 
}, 
{ 
    "_id": "4f870f0e4f95ae0da8000004", 
    "name": "Brand", 
    "parent_id": null 
}, 
{ 
    "_id": "4f8715bd4f95ae0da8000028", 
    "name": "Dermalogica", 
    "parent_id": "4f870f0e4f95ae0da8000004" 
}, 
{ 
    "_id": "4f8715de4f95ae0da800002a", 
    "name": "Molton Brown", 
    "parent_id": "4f870f0e4f95ae0da8000004" 
}, 
{ 
    "_id": "4f8715ea4f95ae0da800002c", 
    "name": "Waxing", 
    "parent_id": "4f870f064f95ae0da8000002" 
}, 
{ 
    "_id": "4f8715f34f95ae0da800002e", 
    "name": "Mens Hair", 
    "parent_id": "4f870f064f95ae0da8000002" 
}, 
{ 
    "_id": "4f8715fd4f95ae0da8000030", 
    "name": "Ladies Hair", 
    "parent_id": "4f870f064f95ae0da8000002" 
}, 
{ 
    "_id": "4f87161f4f95ae0da8000032", 
    "name": "Massage", 
    "parent_id": "4f870f064f95ae0da8000002" 
} 

、関係?

+0

は、あなたがそれを解析し、一方のエンティティの8つのオブジェクトにそれを保存しようとしているスレッドを取得するために、それぞれが3つの属性を持っていますか?それでは何を並べ替えますか?どうか説明してください。 –

+0

はい、まさに私がやることです。私は別の1つのエンティティに格納された別の 'NSManagedObjects'でそれを解析します。私はそれらを受け取ったときに特定の順序がないので、それらはエンティティ内で階層的に順序付けられていません。特に、私は更新を取得し、UID参照でただ一つの更新されたオブジェクトを受け取る。私が 'NSFetchedResultsController'をフェッチするとき、それらを論理的な親子順(および親の中で全体的にアルファベット順)にソートしたいと思います。これはあなたに理にかなっていますか? –

+0

はい、答えを参照してください) –

答えて

-1

ワンウェイ - NSOrderedSetを使用する - http://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSOrderedSet_Class/Reference/Reference.html

第二に、よりにconvinient(NSOrderedSetはiOSの5で導入されているので)、sortDescriptors.Sinceとちょうどsoimple NSFetchRequestそれが配列である、あなたはで多くのdescritorsを使用することができますあなたが望む時間。したがって、parent_ididという記述子を使用すると、望ましい結果が得られます。

Objective-Cでは、名前に下線を使用するのは便利ではありません。 希望。

+0

提案されたsortDescriptorはオブジェクトの "_id"だけをソートしますが、子の "parent_id"に応じて並べ替えには注意しません。これは実際には問題になります。というのも、fetchRequestを取得することは問題ありません。この親子関係に注意するためにsortDescriptorをどのように定義するか考えていますか? –

+0

だから、すべての子enteties.Withすべてのparent_ids.Rightで取っておきたいですか?最初にそれらの_idsで、次にparent_idsで並べ替える?本当に理解し、あなたを助けるために蟻 –

+0

あなたはsortdescriptorsの配列のように感じる(_idとparent_idによる)もあなたを助けませんか? –

0

sortDescriptorsを使用してこの種のデータをソートする方法はありません。 これは私が問題を解決する方法であり、記事のコメントにスレッドスタイルのディスカッションが付いています。私はすべてのコメントをダウンロードした後、私はreindexComments

-(void)reindexComments{ 
    NSArray *articleComments = self.comments.allObjects; 
    [self fetchChildsWithComments:articleComments forParentId:0 num:1]; 
} 

-(NSUInteger)fetchChildsWithComments:(NSArray*)articleComments forParentId:(NSUInteger)parentId num:(NSUInteger)num{ 
    NSArray *childComments = [articleComments filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"parentId == %u", parentId]]; 
    childComments = [childComments sortedArrayUsingComparator:^NSComparisonResult(Comment *c1, Comment *c2) { 
     if (c1.commentIdValue < c2.commentIdValue){ 
      return NSOrderedAscending; 
     }else{ 
      return NSOrderedDescending; 
     } 
    }]; 

    for (Comment *newRootComment in childComments){ 
     newRootComment.numValue = num; 
     num++; 
     num = [self fetchChildsWithComments:articleComments forParentId:newRootComment.commentIdValue num:num]; 
    } 
    return num; 
} 

に必要な、最終的には私だけでソートフィールドnumValueでは私の素敵なディスカッション