(Аннотация: привязки работают в коде, но не в IB)
У меня есть окно, управляемое NSWindowController. Слева от окна находится исходный вид. Справа находится табличное представление, показывающее элементы выбранного источника.
Я установил NSTreeController в моем окне XIB. Я хочу, чтобы его содержимое использовалось для просмотра исходного кода. Его выбор будет управлять представлением таблицы.
Я пытаюсь разделить это с помощью NSViewControllers. Один контроллер представления загрузит NIB, содержащий исходное представление. Другой контроллер представления загрузит представление таблицы.
Видя, что мне нужен доступ к NSTreeController в контроллере представления исходного кода, я установил его как представляемый объект контроллера представления. (На самом деле, чтобы эта настройка выполнялась ко времени вызова awakeFromNib на контроллере представления, я превратил представленный объект в IBOutlet).
Все работает нормально, когда я подключаю исходный код в коде:
[outlineView bind:@"content"
toObject:sources
withKeyPath:@"arrangedObjects"
options:nil];
[outlineView bind:@"selectionIndexPaths"
toObject:sources
withKeyPath:@"selectionIndexPaths"
options:nil];
[[outlineView tableColumnWithIdentifier:@"Title"] bind:@"value"
toObject:sources
withKeyPath:@"arrangedObjects.title"
options:nil];
Однако я не могу воспроизвести это с помощью Interface Builder. Дело в том, что здесь текстовое поле «Контроллер» недоступно. Таким образом, я привязываю «значение» столбца к владельцу файла, используя ключ модели keyPath «представленныйObject.arrangedObjects.title». Это не показывает желаемое поведение. На самом деле исключение выдается: -[NSProxy doesNotRecognizeSelector:_mutatingNodes] called!
Как я могу использовать представленный объект в IB?
Могу ли я создать контроллер в IB, который действует как прокси для представленного объекта?
Могу ли я установить контроллер дерева в исходном виде XIB, который во время загрузки NIB заменяется на представленный объект?