0

Core Data には、次のように配置された 3 つのエンティティがあります。

カテゴリ ->> エントリ ->> フィールド

これら 3 つのエンティティは、後続の 3 つのテーブルビューでユーザーに表示されます。カテゴリが表示され、ユーザーがカテゴリをタップすると、このカテゴリのすべてのエントリが表示されます。

現在、すべてのカテゴリを一度取得しCategorieViewController、ソートして可変配列に保存しています。次に、ユーザーがカテゴリをタップすると、このカテゴリ オブジェクトが配列から抽出され、次のビュー コントローラーに渡されます。次に、このビュー コントローラは、管理対象オブジェクトの nsset などからそのカテゴリのすべてのエントリを抽出します。

今、これを で単純化することについて考えましたNSFetchedResultsControllerが、それが私に役立つかどうかはわかりません。私が知る限り、たとえばユーザーがエントリの名前を変更すると、NSFRC はエントリを自動的に再ソートしますが、それは正しいですか? 今のところ、テーブルビューのデータ ソースである配列でこれを手動で行っています。

また、NSFRC はオブジェクトへのアクセスをどのように簡素化しますか。特定のインデックスパスで管理対象オブジェクトを返すメソッドがあることに気付きました。たとえば、ユーザーが 3 番目のカテゴリをタップし、8 番目のエントリで、そのエントリの 5 番目のフィールドをテーブル ビューに表示したい場合、そのオブジェクトへの完全なインデックスパスを提供することで、目的のフィールド オブジェクトにアクセスできますか?

4

1 に答える 1

0

おそらく、Categoryセクションヘッダーとしてを使用しています。FRCを使用すると、エンティティsectionNameKeyPathをフェッチするときに指定することで、これを簡単に行うことができます。Entry

あなたはあなたがでエントリを得ることができるという点で正しいです

Entry *entry = [self.fetchedResultsController objectAtIndexPath:indexPath]; 

フィールドはでアクセスされます

entry.fields;

これはNSSet、順序付けられていないコレクションです。Fieldエンティティに並べ替え属性が含まれている場合、たとえば、order次のコマンドで個々のフィールドにアクセスできます

Field *field = [[entry.fields filteredSetUsingPredicate:
                 [NSPredicate predicateWithFormat:@"order = %@", fieldPosition]]
                   objectAtIndex:0];

必要に応じて、次のようにフィールドを並べ替えることができます。

NSArray *orderedFields = [entry.fields sortedArrayUsingDescriptors:
     @[[NSSortDescriptor sortDescriptorWithKey:@"order" ascending:YES]]];
于 2013-02-09T11:22:36.677 に答える