1

アプリを作成していて、コアデータを使用してデータを保存しています。正常に動作しますが、セットから並べ替えられた配列を返すための最良の方法は何でしょうか。

たとえば、エンティティB(画像)のリストを含むエンティティA(ボタン)があります。ご存知のとおり、コアデータはNSSetを使用して多対数の関係を保存しています。しかし、最初の注文を追跡したいので、その目的のためにプロパティ「order」を追加しました。問題は、私のコードでは、ソートされた画像のリストが必要なため、カテゴリファイル(ボタン+作成)で次のようなメソッドを作成したことです。

- (NSArray*)imagesArray
{
    return [self.images sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDeacriptorWithKey:@"order" ascending:YES]]];
}

しかし、コード内の複数の領域(異なるクラス)からこのリストにアクセスする必要がある場合は、セットをx回ソートする必要があるため、これが最善の方法ではないと思います...配列を追加する方法はありますか(プロパティ)一度ソートしてからプロパティのみを取得するために私のカテゴリに?

それについてどう思いますか?

ありがとう

4

2 に答える 2

1

カテゴリにプロパティを追加できます:http: //developer.apple.com/library/ios/#documentation/cocoa/Conceptual/ObjectiveC/Chapters/ocAssociativeReferences.html

別の例を次に示します。

カテゴリ拡張を介してNSMutableArrayにプロパティを追加するにはどうすればよいですか?

だが

初期のcoredataNSSetプロパティへの変更(KVOなど)を監視する必要があることに注意してください。
したがって、変更が発生した場合は、プロパティを適切に「再計算」する必要があります...
ターゲットがiOS 5.0以降の場合は、順序集合を使用することをお勧めしますが、そうでないため、説明した方法を使用することを想像できます。上記のリンクで

于 2012-12-03T18:44:42.417 に答える
0

注文プロパティを使用したアプローチは正しいと思います。モデルに-(NSArray *)sortedItemsのようなメソッドを作成したいのですが、これには適切なソート記述子を持つNSFetchRequestがあります。必要に応じて、結果をキャッシュできます-この配列をメモリに保存します。NSManagedObjectには、データベースに保存されていない、メモリだけに保存​​されているプロパティを含めることもできます。しかし、コアデータの速度とパフォーマンスを考えると、これは本当に必要ではないと思います。

于 2012-12-03T17:15:43.203 に答える