iOS: шаблон для отображения входных данных представления в NSManagedObject
Я создаю приложение с контроллером представления, который представляет форму для создания и редактирования Task
объект. Это имеет следующее поведение:
- При инициализации контроллера,
Task
объект (NSManagedObject
подкласс) инициализируется в MOC NSNotificationCenter
Наблюдатели настроены для каждого входа в представлении.- Когда значение входа изменяется, соответствующее свойство
Task
объект обновляется с помощью назначенного наблюдателями метода. (например.- (void)taskNameChanged;
) - Когда пользователь нажимает
Save
,Task
Объект передается в хранилище данных. Если пользователь нажимаетcancel
,Task
объект отбрасывается из МОК.
У меня есть ощущение, что есть лучший способ сделать это. Каков наиболее распространенный шаблон для этого типа транзакции?
2 ответа
В таких случаях редко используют уведомления. Вопрос, который вам нужно задать: вам нужно постоянно обновлять его? В большинстве случаев вы не будете. Я обычно просто значения, когда нажата кнопка Сохранить.
В случае, если вам придется проверять значения ранее, вы все равно не хотите использовать уведомления. Я обычно иду на подключение IBAction
на одно из событий в Интерфейсном Разработчике. Другим вариантом является использование delegate
в этом случае ваш UIViewController
экземпляр будет реализовывать UITextFieldDelegate
протокол.
К сожалению, в iOS отсутствует привязка к Какао, поэтому вам придётся реализовать облегченную версию самостоятельно.
Я сделал это для нашего приложения, и в итоге получилось хорошо. Я использовал KVO вместо уведомлений, для двусторонней привязки. Я создал словарное сопоставление между свойствами объекта и элементами пользовательского интерфейса и с помощью KVC установил привязку при загрузке представления. В моей реализации я добавил опцию, чтобы подсказать, какое значение должно иметь приоритет (это менее ценно для интерфейса данных<->, но я хотел что-то более общее). В конце концов, я добавил поддержку преобразования данных на основе блоков между связанными объектами, чтобы пользовательский интерфейс мог представлять текст, в то время как объект поддержки данных мог содержать различные типы данных.
Обратите внимание, что UIKit не является KVO-совместимым. Я создал KVO-совместимые версии UITextField
а также UITextView
, прослушивая уведомления и отправляя соответствующие сообщения KVO.
Хотя я не могу опубликовать код этого, я надеюсь, что это даст вам идеи относительно ваших дальнейших приключений.