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

Posted

技术标签:

【中文标题】如何使用 Core Data 将 iTunes 样式源列表绑定到 NSTableView?【英文标题】:How do I bind an iTunes style source list to an NSTableView using Core Data? 【发布时间】:2010-03-14 03:08:03 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

CoreData中有创建关系的文档

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

但是从你的数据库模型来看,你用三个表做对了:

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

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

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

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

是的,如果我是你,我会更愿意手动连接 nstableview

【讨论】:

以上是关于如何使用 Core Data 将 iTunes 样式源列表绑定到 NSTableView?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Cocoa 和 Core Data 自动保存

从 Core Data iOS 8 中删除二进制数据

持久化和重新排列 Core Data 记录的顺序

如何将展开和折叠列表行与 Core Data 元素一起使用?

了解如何将 UISearchBar 与 Core Data 一起使用

如何将 NSArray 和 NSArrayController 与 Core Data 一起使用?