我的应用程序中有一个iTunes样式界面:左侧的源列表(NSOutlineView)包含不同的库和播放列表,界面右侧有一个NSTableView,显示“演示文稿”的信息。与iTunes类似,我在表格视图中显示相同类型的信息是否选择了库或播放列表(标题,作者,创建日期等)。
我目前有一个NSArrayController连接到我的NSTableView,并根据源列表中选择的内容设置了fetch谓词。这在选择库时工作正常,因为我可以通过 Presentation Core Data实体中的“type”字段设置fetch谓词进行过滤。但是,当我尝试调整播放列表的获取谓词时,看起来没有任何方法来设置获取谓词,因为我在播放列表和演示文稿之间有一个表来跟上播放列表中的顺序。根据Apple文档,这些类型的谓词不适用于Core Data(它基本上没有多个内连接)。以下是我的数据模型的相关部分。
我的数据模型设置不正确吗?我应该放弃NSArrayController并手动连接NSTableView吗?我想弄清楚是否有一个简单的修复,或者确实是一个设计缺陷。
答案 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实现的语言中:
是的,如果我是你,我会谨慎处理手工连接nstableview