如何使用Core Data将iTunes样式源列表绑定到NSTableView?

时间:2010-03-14 03:08:03

标签: cocoa core-data cocoa-bindings nsarraycontroller

我的应用程序中有一个iTunes样式界面:左侧的源列表(NSOutlineView)包含不同的库和播放列表,界面右侧有一个NSTableView,显示“演示文稿”的信息。与iTunes类似,我在表格视图中显示相同类型的信息是否选择了库或播放列表(标题,作者,创建日期等)。

alt text

我目前有一个NSArrayController连接到我的NSTableView,并根据源列表中选择的内容设置了fetch谓词。这在选择库时工作正常,因为我可以通过 Presentation Core Data实体中的“type”字段设置fetch谓词进行过滤。但是,当我尝试调整播放列表的获取谓词时,看起来没有任何方法来设置获取谓词,因为我在播放列表和演示文稿之间有一个表来跟上播放列表中的顺序。根据Apple文档,这些类型的谓词不适用于Core Data(它基本上没有多个内连接)。以下是我的数据模型的相关部分。

alt text

我的数据模型设置不正确吗?我应该放弃NSArrayController并手动连接NSTableView吗?我想弄清楚是否有一个简单的修复,或者确实是一个设计缺陷。

1 个答案:

答案 0 :(得分: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

但是从你的数据库模型来看,你正在用三个表做正确的事:

Presentation有关于歌曲的信息 PlaylistItem与演示文稿有one-to-one关系 Playlist与PlaylistItem有one-to-many的关系

演示文稿[ID TITLE URL ALBUM ARTIST ....]
PlaylistItem [ID Presentation_ID Playlist_ID]
播放列表[ID Title MoreInfo]

所以在IB CoreData实现的语言中:

  • 首先将每个播放列表提取到左栏中的NSOutlineView
  • 选择,获取播放列表ID并根据Playlist_ID过滤获取所有PlaylistItem
  • PlaylistItem将在其中包含Presentation对象以访问相关的歌曲信息

是的,如果我是你,我会谨慎处理手工连接nstableview