Я новичок в приложениях, основанных на документах, и, следовательно, я мог упустить что-то фундаментальное. Я написал основанное на документе приложение, которое использует подклассный NSWindowController для интерфейса и подклассированный NSDocument для модели. Согласно документации, я инициализирую windowController в makeWindowControllers и загружаю его xib. В конструкторе интерфейса xib имеет мой подкласс windowController, установленный в качестве владельца файла. Среди представлений в окне у меня есть подкласс NSOutlineView, а источник данных и делегат NSOutlineView также отображаются в кончике и подключаются к контроллеру окон через IBOutlets.
Согласно документации, я должен иметь доступ к документу из источника данных OutlineView через [windowController document]. Однако ссылка на windowController (через IBOutlet) из источника данных OutlineView дает мне документ вместо этого!
Это привело к некоторому довольно уродливому коду в базе данных OutlineView (который является подклассом NSObject в xib windowController) для получения документа, например:
-(MyDocument *)myDocument {
MyDocument *theDocument = (MyDocument *)myWindowController;
return theDocument;
}
Где IBOutlet в файле заголовка ссылается на myWindowController как:
IBOutlet MyWindowController *myWindowController
Вкратце - почему IBOutlet, подключенный к windowController, вместо этого получает мне документ напрямую в этой ситуации? Приведенный выше код работает, но кажется, что не должен.
Редактировать: уточнение