В моем проекте я планирую использовать NSNotificationCenter
для связи класса с классом. Поэтому я собираюсь добавить много наблюдателей в NSNotificationCenter
. Мне интересно, безопасно ли это? или, другими словами, это хорошая практика? На самом деле, я сейчас реорганизую свой код, и я хочу разобраться в методах, которые не должны выполняться внутри класса. На самом деле, у меня много контроллеров предупреждений внутри UIViewController
, и это действительно беспокоит меня каждый раз, когда я отлаживаю. Теперь я просто достал все эти контрольные контроллеры и завернул их в другой класс. Для блока обратного вызова в UIAlertAction
я отправляю уведомление на адрес UIViewController
. Вот почему я добавляю много наблюдателей. Мы ценим любые предложения. Большое спасибо!Добавление многопользовательских наблюдателей для NSNotificationCenter
ответ
Нет ничего плохого, как таковое, с несколькими наблюдателями за одно и то же уведомление или для класса, чтобы наблюдать за несколькими уведомлениями.
По конкретному вопросу использования уведомлений для передачи информации о UIAlertActions не делайте этого. Нет ничего плохого в том, что у вас есть класс, который скрывает шаблон для создания определенных экземпляров UIAlertViewController с определенными действиями. Однако API для такого класса должен иметь фабричные методы для каждого конкретного предупреждения, и эти методы должны принимать блоки как параметры для представления обработчиков действий. Органы блоков будут определены в UIViewController, который вызывает предупреждение.
Пример
@interface CustomAlertsFactory : NSObject
+ (void)presentDeleteConfirmationAlertFromViewController:(UIViewController *)viewController
withConfirmAction:(void (^)(UIAlertAction *action))confirmHandler
cancelAction:(void (^)(UIAlertAction *action))cancelHandler;
@end
Реализация этого метода создаст UIAlertViewController с учетом как подтверждения удаления. Действия подтверждения и отмены будут настроены на использование блоков, переданных в качестве параметров.
На стороне контроллера просмотра представьте, что вы разрешаете редактировать таблицу. В tableView:commitEditingStyle:forRowAtIndexPath:
вы бы бросить предупреждение следующим образом:
[CustomAlertsFactory
presentDeleteConfirmationAlertFromViewController:self
withConfirmationAction:^(UIAlertAction *a) {
[tableView deleteRowsAtIndexPaths:@[indexPath]
withRowAnimation:UITableViewRowAnimationFade];
[self dismissViewControllerAnimated:YES completion:NULL];
}
cancelAction:^(UIAlertAction *a) {
[self dismissViewControllerAnimated:YES completion:NULL];
}
];
Благодарим вас за ответ. :) Прежде чем делать то, что я делаю прямо сейчас, я также попробовал то, что вы предложили. Но можете ли вы дать мне только одну причину, по которой вы думаете, что бросить уведомления в этом случае нецелесообразно? –
Это избыточно. У вас будет только один наблюдатель для каждого отображаемого вами оповещения. Он отделяет отображение предупреждения от кода, который обрабатывает действия. Он допускает ошибки, потому что наблюдатели должны отменить регистрацию, чтобы избежать утечек памяти. Это оставляет вас открытым для странного поведения/ошибок, если какой-то предыдущий наблюдатель никогда не регистрируется. – Avi
Понял. Большое спасибо! –
- 1. Добавление и удаление наблюдателей NSNotificationCenter в UIViewController
- 2. NSNotificationCenter изменение наблюдателей заказ
- 3. Лучшая практика для добавления/удаления наблюдателей в/из NSNotificationCenter
- 4. (NSNotificationCenter) Как добавить наблюдателей в разные классы?
- 5. NSNotificationCenter один пост вызывает наблюдателей назвать дважды
- 6. NSNotificationCenter defaultCenter iOS 8. Уведомление не доставляется одному из наблюдателей
- 7. Добавление наблюдателя после обложки NSNotificationCenter?
- 8. Вопрос NSNotificationCenter
- 9. NSNotificationCenter Добавление или удаление UIContentSizeCategoryDidChangeNotification
- 10. уведомление нескольких наблюдателей
- 11. Когда использовать NSNotificationCenter
- 12. Наследование и работа с NSNotificationCenter
- 13. NSNotificationCenter таблица рассылки
- 14. Добавление наблюдателей в UITextField Текст изменен
- 15. Добавление двух одинаковых наблюдателей в Fuelphp (ORM)
- 16. RVM для многопользовательских пользователей
- 17. Приложение для многопользовательских приложений
- 18. NSNotificationCenter
- 19. Добавление наблюдателей NSNotification для просмотра контроллеров на раскадровке
- 20. Добавить наблюдателей панели UITableViewController bar?
- 21. NSNotificationCenter для AddressBook db
- 22. Моделирование CouchDB для многопользовательских пользователей
- 23. push-уведомления для многопользовательских игр
- 24. ASP.net для многопользовательских коммунальных приложений
- 25. Какая структура для многопользовательских SaaS
- 26. jQuery альтернативы для многопользовательских игр?
- 27. NSNotificationCenter повторно выполняет уведомления
- 28. Схема проектирования для многопоточных наблюдателей
- 29. когда звонить removeObserver для NSNotificationCenter
- 30. Используйте NSNotificationCenter для установки иваров?
используется центр уведомлений в сценарии, где нет один к одному связи между классами. В противном случае чрезмерное использование центра уведомлений не является очень хорошей практикой, особенно когда есть несколько наблюдателей из одного уведомления. – Adeel