Подключение классов делегатов в Objective-C - PullRequest
7 голосов
/ 17 сентября 2008

В моем файле Interface Builder есть два элемента управления, и для каждого из этих элементов управления я создал отдельный класс делегата в коде (Control1Delegate и Control2Delegate). Я создал два «Объекта» в конструкторе интерфейсов, сделал их такого типа и подключил к ним элементы управления в качестве делегатов. Делегаты работают просто отлично. Моя проблема в том, что мне нужно передать информацию от одного делегата другому делегату, и я не знаю, как это сделать.

Каков наилучший способ сделать это? Объединить два делегата в один класс или каким-то образом получить доступ к третьему классу, который они оба могут прочитать? Поскольку я фактически не инициализирую класс где-либо в своем коде, я не уверен, как получить ссылку на фактический его экземпляр (если есть фактический его экземпляр) или даже получить доступ к «основному» классу проект пришел с.

Ответы [ 3 ]

8 голосов
/ 18 сентября 2008

Вы можете добавить розетки от одного делегата другому делегату. Есть два способа добавить розетку к объекту в IB (при условии, что вы используете Xcode / IB версии 3.0 или новее:

  1. Если вы еще не сгенерировали код для своих классов делегатов, выберите нужный делегат, затем откройте вкладку «Идентификация объекта» в Инспекторе IB. Добавьте «Класс розетки» типа NSObject. После этого вы сможете установить этот новый выход другому делегату. Конечно, вам нужно будет сгенерировать код для вашего класса делегата и добавить сгенерированные исходные файлы в ваш проект Xcode, прежде чем вы сможете загрузить перо.

  2. Если вы уже сгенерировали код для класса делегата (или добавили объект NSO в ваш NIB и задали его класс в качестве существующего класса в вашем проекте XCode), добавьте переменную экземпляра в класс делегата:

    IBOutlet id outletToOtherDelegate;

    Пока ваш проект XCode открыт (как показано зеленым пузырем в нижнем левом углу окна NIB), IB автоматически обнаружит новый выход и позволит вам назначить его другому объекту делегата в вашей NIB. .

Какао автоматически соединяет эти выходы во время загрузки NIB. Как только awakeFromNib вызывается для экземпляров ваших объектов-делегатов, вы можете предположить, что все другие объекты в NIB были созданы и все выходы были подключены. Однако не следует принимать заказ на звонки на номер awakeFromNib.

1 голос
/ 17 сентября 2008

У меня нет моего Mac в данный момент передо мной, так как я на работе, но возможно ли связать экземпляр одного делегата с членом другого делегата? Это было бы похоже на привязку NSArrayController к члену другого класса контроллера, например.

Однако, в зависимости от того, что делают классы делегатов, если задачи схожи, я, вероятно, просто объединю их в один класс. Это решило бы проблему в целом.

1 голос
/ 17 сентября 2008

Я думаю, что вы можете создать торговые точки на каждой и связать их так, чтобы у каждого из них были все время одни и те же данные. Если есть один объект модели, которым они должны поделиться, это довольно аккуратно. Я на самом деле не знаю, как это сделать; Я думаю, что я видел это в уроке iPhone один раз!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...