Вопрос

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

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

Это было полезно?

Решение

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

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

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

    IBOutlet id outletToOtherDelegate;

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top