У меня есть приложение, которое воспроизводит песни (треки) с такой структурой (скобки [] представляют собой «список»):
SidebarController (NSObject)
SidebarContentController (NSArrayController)
[
ListController (NSArrayController)
[
TrackModel (NSObject)
]
]
Я использую привязки в InterfaceBuilder. Пока у меня была эта структура, все было хорошо, и я мог связать содержимое NSTableView с SidebarController с помощью: self.sidebarContentController.selection.arrangedObjects
Теперь я хотел использовать вместо этого NSOutlineView, потому что я хотел показать плейлисты, которые пользователь сможет открывать и воспроизводить. Теперь структура выглядит следующим образом:
SidebarController (NSObject)
SidebarContentController (NSArrayController)
[
ListController (NSTreeController)
[
PlaylistModel (NSObject)
[
TrackModel (NSObject)
]
]
]
Но теперь я не могу связать NSOutlineView с
self.sidebarContentController.selection.arrangedObjects
потому что, когда я запускаю приложение, я получаю исключение:
*** -[NSProxy doesNotRecognizeSelector:_mutatingNodes] called!
Хорошо работает, когда я пробую простую структуру вроде:
ListController (NSTreeController)
[
PlaylistModel (NSObject)
[
TrackModel (NSObject)
]
]
тогда я могу связать его с self.arrangedObjects
на ListController, а NSOutlineView показывает все списки воспроизведения и дорожки. Но мне действительно нужен SidebarContentController, потому что у меня есть не один список плейлистов, а несколько.
Есть идеи, что не так? Вот скриншот приложения, чтобы вы понимали, зачем мне нужен SidebarContentController:
Мне нужно, чтобы NSTableView стал NSOutlineView, чтобы иметь возможность отображать древовидную структуру.