1

Authorは複数のBooksがあり、どちらもNSManagedObjectsCore Data を使用して 1 対多の関係としてモデル化されています。20% の確率で、著者が何冊の本を書いたかを知りたいだけなので、author.books.

40% の確率でこのデータを公開日順で、40% の確率でタイトル順で並べる必要があります。複数のクラスがこれらの順序付きリストにアクセスする必要があります。

質問1

に 2 つのメソッドを追加することは合理的Author : NSManagedObjectですか? 複数の場所からそれらを要求する必要があるため、要求を行うクラスで毎回 NSSet をソートするよりもスマートに思えます。すなわち:

@property NSSet *books; //core data generated - just returns the unordered set
- (NSArray *)booksByDate //applies an NSSortDescriptor to self.books, returns an NSArray
- (NSArray *)booksByTitle //applies an NSSortDescriptor to self.books, returns an NSArray

質問2

の使用はNSSortDescriptorコストが高く、UI のパフォーマンスに影響を与えることがわかっています。NSOrderedSet理想的には、パフォーマンス上の利点があるかどうかを確認するために、順序付けられた関係をモデル化するために new(ish) を使用してみたいと思います。しかし、どちらを選択しても(日付順またはタイトル順)、最適ではない可能性があるため、関係をどのように並べるかを実際に選択することはできません. 後でソートされたバリアントを追加したいかもしれないことは言うまでもありません。

両方の世界を最大限に活用し、その関係を Core Data モデルに 3 回保存する方法はありますか? 順序付けられていない関係 ( NSSet) に対して 1 回、順序付けられた関係 ( ) に対してそれぞれ 1 回NSOrderedSet。3 つのプロパティすべてを互いに一致させることが自動的にできる場合にのみ、これを検討します。おそらくNSManagedObject、ブックの追加/削除/更新方法を微調整することによって可能です。たとえば、同じ本を (正しい場所に) と にも挿入するように何らかの方法でカスタマイズしauthor.addBookたいと考えています。そしておそらく隠しますauthor.booksByDateauthor.booksByTitle

このようなことは可能ですか?アドバイス?私の主な目標は、順序付けられたリストの取得を高速化することであることを思い出してください。挿入/更新/削除の書き込み時間を喜んで犠牲にします。

4

1 に答える 1

0

ソートされた本のリクエストを行うときに、ソートを試みることをお勧めします。このリストを UITableView または同様のインターフェイス要素で表示する場合、NSFetchedResultsController とそのキャッシュ システムを使用して、並べ替えられた書籍のリストをキャッシュすることができます。これは、日付/タイトルで並べ替えられた書籍にアクセスしようとすると、書籍の順序を決定する計算が既にキャッシュされているため、リストがより速く生成されることを意味します。ここで同様の質問に対して同様の解決策を提供しました。

于 2012-10-23T16:22:02.017 に答える