Изменить делегата MGTwitterEngine - PullRequest
5 голосов
/ 02 июня 2010

Я установил и успешно вошел в систему через xAuth с использованием расширенного класса MGTwitterEngine. Мой вопрос: хочу ли я передать это другому контроллеру представления, как я могу изменить класс делегата, так как это своего рода слабая ссылка

@interface MGTwitterEngine : NSObject <MGTwitterParserDelegate> {
__weak NSObject <MGTwitterEngineDelegate> *_delegate;

Могу ли я обернуть это в одноэлементный класс и пройтись по этому пути, кажется излишним входить в систему каждый раз, или я пропустил кропотливо очевидный способ поделиться этим объектом вокруг

В данный момент я добавил метод setDelegate в MGTwitterEngine, но чувствую, что я без необходимости бьюсь о фреймворке

Ответы [ 3 ]

6 голосов
/ 09 мая 2011

Если вы разделяете движок между несколькими объектами, то вы захотите, чтобы какой-то другой объект / синглтон обернул движок и выступил в качестве его единственного делегата. Если вы занялись программированием базы данных, тогда думайте об этом как о соединении с базой данных - вы, вероятно, не захотите, чтобы каждый контроллер представления создавал свое собственное соединение с базой данных. Вместо этого вы должны создать какой-то объект диспетчера данных, который будет совместно использоваться представлениями и, возможно, абстрагировать некоторые внутренние компоненты БД.

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

Если у вас разные контроллеры представлений, вызывающие одни и те же методы (и если да, то почему?), Вы все равно могли бы перенаправить ответы обратно на соответствующие контроллеры представлений. Как говорится в документации MGTwitterEngine, «Каждый метод Twitter API возвращает строку NSString, которая является уникальным идентификатором для этого соединения.» Вам просто нужно передать объект (контроллер представления) или блок в качестве дополнительного параметра к каждому из ваших завернутых методов. Вы можете кэшировать строку идентификатора твиттера и этот объект / блок в изменяемом словаре, когда ваша оболочка отправляет ответ, а затем искать идентификатор соединения в кэше, когда пришло время обработать ответ.

2 голосов
/ 05 мая 2011

на самом деле, вы можете. Делегат - это не что иное, как переменная в MGTwitterEngine. Просто добавьте его экземпляр в следующем контроллере представления, добавив соответствующий заголовок и вызовы дополнения. после установки нового набора контроллеров вида:

nextViewController._mgTwitterEngine = self.mgTwitterEngine;
nextViewController.mgTwitterEngine.delegate=nextViewController;

затем вызовите nextViewController. Не забудьте установить делегат обратно в исходный контроллер представления, когда вы вернетесь к нему (либо в viewDidAppear, либо в viewWillAppear)

Надеюсь, это поможет ... Всего наилучшего!

0 голосов
/ 20 июля 2012

Использовать NSNotifications в делегате.

Создайте контроллер представления, в который вы хотите, чтобы делегат добавил наблюдателя. Попросите метод делегата для MGTwitterEngine опубликовать уведомление.

...