Как я могу уведомить контроллер представления о новом обновлении модели без использования уведомлений, делегатов или KVO? Меня спросили в интервью, могу ли я использовать блоки, чтобы уведомить контролера моего обновления? Можете ли вы дать мне пример того, как я буду использовать блоки для этого?Обновить контроллер представления обновления данных в модели
ответ
Существует много обсуждений по теме, о которой вы спрашиваете (выбор между делегацией, уведомлениями, наблюдениями и блоками). Я посмотрю, могу ли я объяснить, почему и как быстро использовать блоки:
Вы должны использовать блок, если есть только одно или два события, чтобы сообщить об этом наблюдающему/вызывающему объекту. Пример из библиотеки IOS находится в NSURLSessionDataTask
классе - это есть метод:
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler
Поскольку существует только ограниченное количество вещей, которые могут произойти на сетевой вызова (она проходит через успешно или не удается), используется блок.
С другой стороны, вы можете использовать делегирование, когда есть много разных событий, чтобы уведомить наблюдателя/делегата. Хорошим примером является UITextField
- текстовое поле в iOS может начинатьсяEditing, endEditing, изменять символы в поле, очищать, возвращать и т. Д. Не стоит перегружать блок со всеми различными параметрами. Таким образом, делегирование используется для того, чтобы делегат мог выбрать, какие события ему необходимо знать/обновляться, а также пропускать другие.
Чтобы использовать это на вашей модели, вы можете, есть метод, модель, которая выглядит, как это, например:
- (void) saveObject:(NSObject*)object completionHandler:(void (^) (BOOL success, NSError *error))completionHandler
Это обновить объект, который пройдет в, а затем запустить блок вы проходите когда он заканчивается. Внутри этого блока вы можете получить доступ к флажку успеха, а также к возможной ошибке. Вы можете вызвать это прямо из своего контроллера просмотра и использовать переменные, определенные в указанном контроллере представления.
Вся дискуссия - это скорее форма искусства, чем точная наука. Если вы хотите узнать больше об этом, не стесняйтесь, чтобы взглянуть на некоторые должности, как следующее:
http://stablekernel.com/blog/blocks-or-delegates/ http://blog.shinetech.com/2011/06/14/delegation-notification-and-observation/
ReactiveCocoa другое возможное решение. ReactiveCocoa - популярная структура, которая работает аналогично KVO, но вместо этого использует блоки.
заказ раздел введение на своей странице GitHub для простого примера:
https://github.com/ReactiveCocoa/ReactiveCocoa#introduction
Там также некоторые хорошие учебники по теме:
http://www.raywenderlich.com/62699/reactivecocoa-tutorial-pt1
- 1. Обновить контроллер корневого представления
- 2. Контроллер представления модели C#
- 3. Обновить параметры, после обновления модели
- 4. Передача данных объекта модели из представления, в контроллер, в модель?
- 5. Получение представления Контроллер для извлечения данных из файла модели данных
- 6. Передача списка/модели из представления в контроллер
- 7. Контроллер представления модели: должно ли представление знать пользовательские типы данных?
- 8. Как обновить представление без обновления всего представления?
- 9. Приложение попыталось представить контроллер представления модели nil
- 10. Быстрая отправка данных из дочернего представления в контроллер родительского представления
- 11. Обновить контроллер главного представления после входа пользователя на другой контроллер представления
- 12. Копирование модели представления в модель данных
- 13. толчок контроллер представления отпустив представленный контроллер представления
- 14. Контроллер вызова Laravel из представления без обновления страницы
- 15. ASP.NET, отправка данных из представления в контроллер
- 16. Возврат данных из представления в контроллер
- 17. Передача данных в контроллер табличного представления
- 18. Загрузка данных в контроллер табличного представления
- 19. Отправка данных из представления в контроллер
- 20. Обновить модели после сохранения без обновления
- 21. Контроллер обновления в AngularJS
- 22. Передача данных со второго представления в первый контроллер представления
- 23. iOS Передача контроллера представления данных в контроллер табличного представления
- 24. Передача данных модели из View в контроллер
- 25. Как обновить контроллер представления вместо того, чтобы нажимать контроллер просмотра при отправке данных?
- 26. Как обновить данные модели модели из другой модели представления в Knockout
- 27. Передача модели из представления в контроллер с использованием вызова Ajax
- 28. Передача модели из представления в контроллер с помощью Jquery Ajax
- 29. Как отправить часть модели представления в контроллер веб-API
- 30. Передача модели с помощью dropDownListFor() из представления в контроллер
Спасибо вам за ответ, но я полагают, что ReactiveCocoa использует KVO за кулисами –