にAuthor
は複数のBooks
があり、どちらもNSManagedObjects
Core 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.booksByDate
author.booksByTitle
このようなことは可能ですか?アドバイス?私の主な目標は、順序付けられたリストの取得を高速化することであることを思い出してください。挿入/更新/削除の書き込み時間を喜んで犠牲にします。