Совместное использование объекта для привязки (в частности, NSDocument) между различными представлениями/перьями

Я пишу приложение для OSX (Lion), используя Xcode 4.

Удар в стену с этим, и Интернет до сих пор оказался не особенно полезным.

У меня есть определенный документ, а также MainMenu.xib и окно документа; Окно документа, конечно, создается, когда документ загружается/создается, и, следовательно, имеет доступ к соответствующим данным.

Я хочу максимально использовать Cocoa Bindings в этом проекте, поэтому мой вопрос таков:

Если я создам другой вид (скажем, NSViewController со связанным Nib); как мне разрешить ему доступ к данным для документа?

Я пытался добавить #import для класса документа, но это вызывает проблемы, когда я добавляю #import в класс документа в контроллер представления (для его создания) - я получаю ошибки компиляции неизвестного типа.

Я также пошел по пути передачи промежуточных объектов (и даже доступа к геттерам/сеттерам после создания контроллера представления); наверняка должен быть лучший, более чистый способ?

Приложение имеет только один NSWindowController (по умолчанию), и это все, это ваниль из шаблона приложения на основе документов XCode, не связанных с основными данными.

Спасибо за помощь, Клинт.


person Clint    schedule 15.08.2011    source источник


Ответы (1)


Вам нужно иметь ссылку на какой-либо документ в других ваших классах, если вы хотите привязаться к нему. Поскольку вы уже используете NSViewController, вы можете установить representedObject из NSViewController в свой документ. В качестве альтернативы вы можете создать подкласс NSViewController и создать пользовательское свойство для ссылки на документ.

YourViewController* controller = [[YourViewController alloc] initWithNibName:@"YourNib" bundle:nil];
[controller setRepresentedObject:yourDocument];

В Interface Builder вы можете затем связать объекты в nib вашего контроллера представления с владельцем файла, используя ключевой путь representedObject.<some property of your document>.

person Rob Keniger    schedule 16.08.2011
comment
Я проверю это позже, когда буду рядом со своим ценным Mac: p (я пишу программное обеспечение для Windows за деньги). Большое спасибо за помощь! - person Clint; 16.08.2011