Как мне установить владельца моего файла наконечника на объект в другом файле наконечника?

#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]; .