6

私のアプリケーションには iTunes スタイルのインターフェイスがあります。左側にはさまざまなライブラリとプレイリストを含むソース リスト (NSOutlineView) があり、インターフェイスの右側には "プレゼンテーション" の情報を表示する NSTableView があります。iTunes と同様に、ライブラリまたはプレイリストが選択されているかどうかにかかわらず、テーブル ビューに同じ種類の情報 (タイトル、作成者、作成日など) を表示しています。

代替テキスト

現在、NSTableView に接続されている NSArrayController があり、ソース リストで選択された内容に基づいてフェッチ述語を設定していました。プレゼンテーションコア データ エンティティの「タイプ」フィールドでフィルタリングするようにフェッチ述語を設定するだけでよいため、これはライブラリを選択するときにうまく機能します。ただし、プレイリストのフェッチ述語を調整しようとすると、プレイリスト内の順序に追いつくためにプレイリストとプレゼンテーションの間にテーブルがあるため、フェッチ述語を設定する方法がないように見えます。Apple docs によると、これらのタイプの述語は Core Data では実行できません (基本的に複数の内部結合は実行されません)。以下は、私のデータモデルの関連部分です。

代替テキスト

データ モデルの設定が間違っていますか? NSArrayController を削除して、NSTableView の接続を手動で処理する必要がありますか? 簡単な修正があるのか​​、それとも本当に設計上の欠陥があるのか​​ を把握しようとしています.

4

1 に答える 1

0

CoreDataでリレーションシップを作成するためのドキュメントがあります

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html
http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreData /Articles/cdBindings.html

しかし、DBモデルからは、次の3つのテーブルを使用して正しく実行しています。

Presentationプレゼンテーション との関係のある曲PlaylistItemとPlaylistItemとの関係のある曲に関する情報 one-to-onePlaylistone-to-many

プレゼンテーション[ID TITLE URL ALBUM ARTIST ....]
プレイリストアイテムプレイ[ID Presentation_ID Playlist_ID]
リスト [ID Title MoreInfo]

したがって、IBCoreData実装の言語では次のようになります。

  • 左側の列のNSOutlineViewにすべてのプレイリストをフェッチすることから始めます
  • 選択時に、Playlist IDを取得し、Playlist_IDフィルタリングに基づいてすべてのPlaylistItemを取得します
  • プレイリストアイテムには、関連する曲の情報にアクセスするためのプレゼンテーションオブジェクトが含まれます

はい、もし私があなたなら、nstableviewを手動で接続することに注意することをお勧めします

于 2011-08-18T08:43:13.933 に答える