如何使用Core Data将iTunes风格的源列表绑定到NSTableView?

6
我在我的应用程序中有一个类似iTunes的界面:左侧是源列表(NSOutlineView),包含不同的库和播放列表,右侧是NSTableView显示“演示文稿”的信息。与iTunes类似,无论选择哪个库或播放列表,在表视图中都显示相同类型的信息(标题、作者、创建日期等)。
我目前已经将NSArrayController连接到了NSTableView,并根据源列表中所选内容设置获取谓词。当选择库时,这种方式可以很好地工作,因为我可以只将获取谓词设置为过滤我的“Presentation”核心数据实体中的“type”字段。然而,当我尝试调整播放列表的获取谓词时,看起来没有任何方法可以设置获取谓词,因为我在播放列表和演示文稿之间有一张表格来保持播放列表内的顺序。根据苹果文档,这些类型的谓词在Core Data中无法实现(它基本上不支持多个内部联接)。下面是我的数据模型的相关部分。
我的数据模型设置错误吗?我应该放弃NSArrayController并手动处理连接NSTableView吗?我正在努力找出是否有简单的解决方法,还是真的存在设计缺陷。
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

但是根据您的数据库模型,您使用三个表做得很正确:

Presentation包含有关歌曲的信息 PlaylistItem与Presentation具有一对一关系 Playlist与PlaylistItem具有一对多关系

Presentation [ID TITLE URL ALBUM ARTIST ....]
PlaylistItem [ID Presentation_ID Playlist_ID]
Playlists [ID Title MoreInfo]

因此,在IB CoreData实现语言中:

  • 从左侧列中的NSOutlineView中提取每个播放列表
  • 选择时,获取播放列表ID并基于Playlist_ID过滤检索所有PlaylistItem
  • PlaylistItem将包含内部的Presentation对象以访问相关歌曲信息

是的,如果我是您,我会更喜欢手动处理连接nstableview的问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接