2009-10-03 5 views
4

(Аннотация: привязки работать в коде, но не в IB)Связывание с representedObject NSViewController в

У меня есть окно, управляемое NSWindowController. Слева от окна находится представление источника. Справа находится табличный вид, показывающий элементы текущего выбранного источника.

Я установил NSTreeController в своем окне XIB. Я хочу, чтобы его содержимое использовалось для представления источника. Выбор будет вести табличный вид.

Я пытаюсь разделить это с помощью NSViewControllers. Один контроллер просмотра загружает NIB, содержащий представление источника. Другой контроллер просмотра загрузит представление таблицы.

Учитывая, что мне нужен доступ к NSTreeController в контроллере представления исходного кода, я установил его как представляемый объект контроллера представления. (На самом деле для этой установки, которая должна быть выполнена к моменту пробуждения, FromNib вызывается на контроллере представления, я превратил представленный объект в 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 из «presentObject.arrangedObjects.title». Это не показывает желаемого поведения. На самом деле выбрано исключение: -[NSProxy doesNotRecognizeSelector:_mutatingNodes] called!

Как использовать представленный объект в IB? Могу ли я создать контроллер в IB, который действует как прокси-объект для представленного объекта? Могу ли я настроить древовидный контроллер в представлении исходного кода XIB, который во время загрузки NIB поменяется для представленного объекта?

ответ

2

Я отошел от использования presentObject. Похоже, это предназначено только для объектов модели.

Теперь я перехожу к контроллеру дерева, используя пользовательскую розетку. Я продолжал настраивать и срывать привязки в коде.