iOS: шаблон для отображения входных данных представления в NSManagedObject

Я создаю приложение с контроллером представления, который представляет форму для создания и редактирования Task объект. Это имеет следующее поведение:

  1. При инициализации контроллера, Task объект (NSManagedObject подкласс) инициализируется в MOC
  2. NSNotificationCenter Наблюдатели настроены для каждого входа в представлении.
  3. Когда значение входа изменяется, соответствующее свойство Task объект обновляется с помощью назначенного наблюдателями метода. (например. - (void)taskNameChanged;)
  4. Когда пользователь нажимает Save, Task Объект передается в хранилище данных. Если пользователь нажимает cancel, Task объект отбрасывается из МОК.

У меня есть ощущение, что есть лучший способ сделать это. Каков наиболее распространенный шаблон для этого типа транзакции?

2 ответа

Решение

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

В случае, если вам придется проверять значения ранее, вы все равно не хотите использовать уведомления. Я обычно иду на подключение IBAction на одно из событий в Интерфейсном Разработчике. Другим вариантом является использование delegateв этом случае ваш UIViewController экземпляр будет реализовывать UITextFieldDelegate протокол.

К сожалению, в iOS отсутствует привязка к Какао, поэтому вам придётся реализовать облегченную версию самостоятельно.

Я сделал это для нашего приложения, и в итоге получилось хорошо. Я использовал KVO вместо уведомлений, для двусторонней привязки. Я создал словарное сопоставление между свойствами объекта и элементами пользовательского интерфейса и с помощью KVC установил привязку при загрузке представления. В моей реализации я добавил опцию, чтобы подсказать, какое значение должно иметь приоритет (это менее ценно для интерфейса данных<->, но я хотел что-то более общее). В конце концов, я добавил поддержку преобразования данных на основе блоков между связанными объектами, чтобы пользовательский интерфейс мог представлять текст, в то время как объект поддержки данных мог содержать различные типы данных.

Обратите внимание, что UIKit не является KVO-совместимым. Я создал KVO-совместимые версии UITextField а также UITextView, прослушивая уведомления и отправляя соответствующие сообщения KVO.

Хотя я не могу опубликовать код этого, я надеюсь, что это даст вам идеи относительно ваших дальнейших приключений.

Другие вопросы по тегам