-1

私はここで簡単な質問で少し立ち往生しています:

私はコアデータと共にローカルに保存されたオブジェクト(休息を介して来る)を持っています。coredata エンティティ内には、次の属性があります。

  • 猫 ID (int16)
  • 親 ID (int16)
  • タイトル (文字列)

これは、ユーザーが後でアプリの pickerView から選択できるカテゴリの単純なリストを作成するためです。フィールド catID は、各カテゴリを識別する一意の ID です。parentID は、マスター カテゴリの catID を保持します。parentID = 0 の場合、カテゴリはマスター カテゴリ (ルート レベル) です。

ユーザーが選択できるように、ピッカービューにカテゴリのリストをロードする必要があります。PickerView 内のリストは次のように表示されます。

MainCategory 1
MainCategory 2
    SubCategory 2.1
    SubCategory 2.2
MainCategory 3
MainCategory 4
    SubCategory 4.1

すべてのカテゴリを NSArray などのオブジェクトとしてロードし、カテゴリを正しい方法で並べ替えるにはどうすればよいですか? レベル 2 (ここで、parentID != 0) のカテゴリは、pickerView で正しく表示されるように、NSArray のマスター カテゴリの直後に表示される必要があります。技術的には、カテゴリとサブカテゴリは同じタイプのオブジェクトです。parentIDオブジェクトがカテゴリかサブカテゴリかを示すのは、属性だけです。

4

2 に答える 2

2

データベースではなく、Coredata が何であるか (オブジェクト グラフ マネージャー) を確認する必要があります。

私の個人的な選択は、エンティティ自体を指す関係 (および対応する逆) を作成することです。

したがって、Categoryエンティティ、childCategories1 対多の関係、およびparentCategoryその逆としての 1 対 1 の関係があります。

このようにして、通常どおりカテゴリを作成し、適切な接続を作成できます。

Category *childCat = ...
Category *parentCat = ...
childCat.parentCategory = parentCat;

そして、フェッチは、それをどのように行いたいかを決めるだけの問題です。親を持たないすべてのCategoryエンティティ (つまり、それらがマスター カテゴリである) を取得し、各マスター カテゴリについて関係をたどって を見つけることができますchildCategories

于 2012-09-06T09:46:25.403 に答える
1

質問を少し拡張できますか?

それがあなたが望むものかどうかはわかりませんが、NSSetを並べ替えるには、このようにすることができます

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"theKeyToOrder" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];   

NSArray * sortedArray = [TheCoreDataResultNSSet sortedArrayUsingDescriptors:sortDescriptors];

編集:

NSMutableArray を作成して要素を追加できます。

このようなもの:

NSMutableArray * sortedArray = [[NSMutableArray alloc]init];
 for (parentCategory in parentCategories) {
    [sortedArray addObject:parentCategory];
        for (child in parentCategory){
            [sortedArray addObject:child];
        }
}

parentCategories だけを含む CoreData の結果が必要であり、子/親の関係を使用して子を追加します。

EDIT2: 申し訳ありませんが、親子関係がないように見えませんでした。関係の親 ID を変更する必要があると思います。とにかく、私が言ったことを行うことができます。親を取得してから、for で、parentID が現在のカテゴリであるカテゴリを取得します。

于 2012-09-06T09:25:36.167 に答える