2009-07-04 9 views
7

iPhone SDKのコアデータを使い始めたばかりですが、配列のような並べ替えられたリストを保存しようとしています。ただし、コアデータのリレーションシップは、取得時にセットとして表されます。これにより、オブジェクトの配置順序を保存することが困難になります。コアデータ内のインデックス付きの関係

良い例は、アイテムの並べ替えが許可されているときのテーブルビューのデータアイテムです。簡単な解決策は、管理オブジェクトにインデックスプロパティを含めることです。

ドキュメント< -manyツー多対>のDataItem

異なるドキュメントインスタンスが同じのDataItemにリンクでき、各ドキュメントは、1つまたは複数のDataItem(複数可)を参照することがあります

は、次の階層を考えてみましょう。したがって、DataItemにインデックスプロパティを設定すると、そのインスタンスの再利用性が低下します。つまり、Documentの1つのインスタンスについてのみインデックスを保存できます。

階層ビューをテーブルビューで整然と表示する方法はありますが、各DataItemインスタンスは再利用可能な状態に保つことはできますか?ありがとう!

答えて

3

DocumentItemを別のデータ構造にして、DataItemをテーブルビューの位置にマップすることをお勧めします。複数のドキュメントにDataItemを追加する必要がある場合は、同じDataItemを複数の位置に配置できるほか、このソリューションも機能します。

私はCore Dataオブジェクトを注文するためのさまざまな戦略を検討していたときに、サンプルコードも含めて詳細にこれを行う方法を説明するblog postが見つかりました。

7

あなたはこのように、別のエンティティでそれを行うことができます: alt text http://gallery.me.com/davedelong/100084/Screenshot-20on-202009-07-04-20at-2010-34-56-20AM/web.jpg?ver=12467253090001

ドキュメントのようなものを使用することにより、実際のdataItemsを見つけることができる:

NSSet * documentDataItems = [[document orderedDataItems] valueForKey:@"dataItem"]; 

同様に、のDataItemは、そのすべてのドキュメントを見つけることができます

NSSet * dataItemDocuments = [[dataItem orderedPositions] valueForKey:@"document"]; 
+0

画像が壊れているようです。 –

+0

@BJホーマー - ありがとう。どうやらtwitpicは静的リンクを好まない。代わりにMobileMeにアップロードしました。 –

15

OS X Lion(10.7)から、これははるかに単純です。 Cocoaはコアデータと互換性のある新しいNSOrderedSetクラスをサポートしました。この機能は、iOS 5.0でも必要ですが、iOSでも利用できます。これは、アプリを以前のバージョンのiOSやOS Xと下位互換性を持たせたい場合には使用できないことを意味します。

注文をするにはCore Dataモデルエディタを開き、何か関係があり、 "順序付けられた"チェックボックスをチェックしてください。

+0

この新しいAPIに関するドキュメントはありますか?私はリリースノートで正式に議論しているのを見ただけです。たとえば、テーブルビューにこの順番でレコードを表示する方法を知りたいのですが。 – Dov

+0

NSOrderSetのクラスリファレンスに対する私の元の回答にリンクがあります。しかし、私は特に、テーブルビュー内の最良のユースケースに関係するものについては何も知らない。 –

+1

NSOrderedSetは現在iCloudと一緒に使用することはできません。 –

関連する問題