Делегат не вызывается - PullRequest
0 голосов
/ 02 февраля 2010

У меня есть ContactsViewController, который - когда выбрана строка - MessageViewController открывается (с помощью pushViewController). Как ContactsViewController, так и MessageViewController «регистрируются» для получения сообщений DatastoreDelegate. Странно то, что все это прекрасно работает при загрузке моего приложения, но как только я перехожу к MessageViewController, методы делегата на моем ContactsViewController больше не вызывают Оба этих контроллера должны обрабатывать метод [messageAdded: (Message *) message], но только MessageViewController продолжает получать сообщения после его однократного открытия.

Кто-нибудь знает, как заставить это работать?

1 Ответ

1 голос
/ 02 февраля 2010

В Какао каждый объект с делегатом имеет только одного делегата (в любой момент времени). Этот делегат является единственным объектом, который получает сообщения делегата. Нет реальной концепции, что «оба объекта зарегистрированы для получения сообщений делегатов». Мое подозрение здесь заключается в том, что когда вы нажимаете MessageViewController, он устанавливает себя в качестве делегата хранилища данных, а затем ContactsViewController никогда не видит эти сообщения снова, потому что он не устанавливает себя обратно.

Я не знаю, как структурирован ваш код, но вы можете просто передать делегат каждый раз, когда контроллеры меняют представление, чтобы активным был текущий делегат.

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

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