Macos NSOutlineView通过NSArrayController查看绑定
我有一个应用程序,它可以播放这样一种结构的歌曲(曲目)([]括号表示“一个列表”): 我正在InterfaceBuilder中使用绑定。只要我有这样的结构,一切都很好,我就能够使用:Macos NSOutlineView通过NSArrayController查看绑定,macos,cocoa,interface-builder,nsoutlineview,Macos,Cocoa,Interface Builder,Nsoutlineview,我有一个应用程序,它可以播放这样一种结构的歌曲(曲目)([]括号表示“一个列表”): 我正在InterfaceBuilder中使用绑定。只要我有这样的结构,一切都很好,我就能够使用:self.sidebarContentController.selection.arrangedObjects 现在我想改用NSOutlineView,因为我想显示用户可以打开和播放的播放列表。所以现在的结构是这样的: SidebarController (NSObject) SidebarCon
self.sidebarContentController.selection.arrangedObjects
现在我想改用NSOutlineView,因为我想显示用户可以打开和播放的播放列表。所以现在的结构是这样的:
SidebarController (NSObject)
SidebarContentController (NSArrayController)
[
ListController (NSTreeController)
[
PlaylistModel (NSObject)
[
TrackModel (NSObject)
]
]
]
但现在我无法将NSN大纲视图与
self.sidebarContentController.selection.arrangedObjects
因为启动应用程序时出现异常:
*** -[NSProxy doesNotRecognizeSelector:_mutatingNodes] called!
当我尝试以下简单结构时,它工作得很好:
ListController (NSTreeController)
[
PlaylistModel (NSObject)
[
TrackModel (NSObject)
]
]
然后我可以将它与ListController上的self.arrangedObjects
绑定,NSOutlineView显示所有播放列表和曲目。但我真的需要SidebarContentController,因为我不仅有一个播放列表,还有几个
你知道怎么回事吗?以下是应用程序的屏幕截图,您可以了解我为什么需要SidebarContentController:
我需要NSTableView成为NSOutlineView,以便能够显示树状结构。我认为问题的根源在于在本质上是您的模型中使用控制器。如结构图所示,假设“列表”等同于一个数组,则您有:
SidebarContent (NSArrayController)
List (NSArrayController)[]
Track (NSObject)[]
相反,您应该:
SidebarContent (NSArray)
List (NSArray)[]
Track (NSObject)[]
控制器对象将每个视图(两个TableView和一个自定义视图;因此,两个NSArrayController和一个NSObjectController)绑定到模型中的适当内容(第二个NSArrayController的内容取决于第一个视图的选择)
此时,您可以将另一层添加到模型中(播放列表列表?),用NSOutlineView替换第二个NSTableView,并用NSTreeController替换第二个NSArrayController。啊,好的,我想我开始理解了。我将努力实施这一办法。
SidebarContent (NSArray)
List (NSArray)[]
Track (NSObject)[]