#objective-c #cocoa #nib
#objective-c #cocoa #наконечник
Вопрос:
Я новичок в Cocoa, и у меня возникли проблемы с разделением моего файла наконечника на несколько файлов наконечника.
Мой MainMenu.nib
содержит Tracker Controller
объект, который является подклассом NSObject
. У него есть выход к Show Tracker
пункту меню в моем главном меню.
У моего TrackerWindow.nib
класса Owner файла установлено значение TrackerController
, и у него есть выходы к окну и представлению в этом файле с наконечником.
Я не уверен, как сделать так, чтобы владелец файла второго наконечника был прокси для экземпляра, созданного TrackerController
в первом наконечнике. (Я считаю, что мне нужен TrackerController
экземпляр в первом наконечнике, чтобы я мог использовать IB для установки пункта меню outlet.)
Я делаю это неправильно? Если да, то как я могу использовать IB для установки выходов для одного и того же объекта в нескольких файлах наконечника? Если нет, то как я могу заставить владельца файла второго наконечника указывать на TrackerController
, который я уже создал в первом наконечнике?
Ответ №1:
Это написано с точки зрения разработчика iOS (с использованием контроллеров просмотра). Я не уверен, чем отличается Mac OS X, но перенести идеи не должно быть сложно.
Самый простой способ установить владельца файла для наконечника — предоставить его в качестве аргумента для loadNibNamed:owner:options:
:
[[NSBundle mainBundle] loadNibNamed:@"Tracker" owner:trackerController options:optionsDict];
Приведенный выше фрагмент предполагает, что trackerController
является экземпляром UIViewController. Если это не так, используйте вместо этого следующее решение.
Вместо использования initWithNibName:bundle:
создайте TrackerViewController
следующим образом (где trackerController
— ссылка на существующий объект TrackerController):
NSDictionary *proxyDict = [NSDictionary dictionaryWithObject:trackerController forKey:@"trackerController"];
NSDictionary *optionsDict = [NSDictionary dictionaryWithObject:proxyDict forKey:UINibExternalObjects];
TrackerViewController *trackerViewController = [[[TrackerViewController alloc] init] autorelease];
[[NSBundle mainBundle] loadNibNamed:@"Tracker" owner:trackerViewController options:optionsDict];
// Display trackerViewController
Создайте внешний объект с идентификатором trackerController
в Tracker.извлеките наконечник и подключите свои выходы / действия к этому объекту.
Комментарии:
1. Спасибо, это наставило меня на правильный путь! Поскольку я уже создал экземпляр a
trackerController
в своемMainMenu.nib
, я использовал следующее:[NSBundle loadNibNamed:@"TrackerWindow" owner:self.trackerController];
.