iOS — проектное решение для обратных вызовов (используйте NSNotifications или AppDelegate)

Попытка принять дизайнерское решение о том, как реализовать обратные вызовы из Facebook SDK для iOS. Прямо сейчас я создал вспомогательный (одиночный) класс с именем FacebookHelper для хранения экземпляра Facebook и реализации методов делегата, таких как - (void)request:(FBRequest *)request didLoad:(id)result, - (void)fbDidLogout и так далее.

С помощью этой опции я затем публикую уведомления, когда вызываются методы делегата, и заинтересованные UIViewController могут подписаться на уведомления, а затем обрабатывать обновления.

Другой вариант, о котором я подумал, состоит в том, чтобы AppDelegate был делегатом экземпляра Facebook, а затем реализовывал все методы делегата и из методов делегата информировал видимый UIViewController (если он заинтересован), что произошло какое-то обновление Facebook.

По сути, у меня есть только два получателя, которые заинтересованы в обновлениях Facebook; один AppDelegate, а другой ViewControllerX.


person Peter Warbo    schedule 27.02.2012    source источник


Ответы (2)


Питер, я думаю, что метод уведомления может работать лучше. Вот почему:

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

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

Я имею в виду, что это все вопрос стиля, но чего бы это ни стоило (может быть, не очень, ха-ха), это мое мнение.

person Jake Vizzoni    schedule 28.02.2012

Делегат приложения должен обрабатывать только методы делегата UIApplication. (Ну, ИМХО, но я думаю, вы обнаружите, что это довольно популярное мнение.)

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

person jsd    schedule 28.02.2012