У меня есть простая модель Foo
, которая представляет предпочтения пользователя и инкапсулирует NSString
и NSNumber
. Я хочу сохранить массив Foo
в пользовательских значениях по умолчанию, чтобы они сохранялись между запусками приложения; и я хотел бы отображать их в виде таблицы, чтобы пользователь мог добавлять, удалять и редактировать их. Решение этой проблемы с привязками казалось довольно простым, но для меня оказалось невозможным приступить к работе.
Когда мое приложение запускается, я регистрирую в NSUserDefaults
архив с ключами массива начальных Foo
. В моем XIB у меня есть контроллер массива с его массивом содержимого, привязанным к values
ключу контроллера общего пользователя по умолчанию; с ключевым путем foos
; Установлен флажок «Обрабатывать контент как составное значение»; и NSKeyedUnarchiveFromData
как преобразователь значений. Представление таблицы затем, в свою очередь, привязывается к контроллеру массива, а столбцы таблицы - к свойствам Foo
.
Это отлично работает, когда Foo
добавляются и удаляются из массива - ключ foos
в пользовательских значениях по умолчанию обновляется, чтобы отразить новое содержимое массива. Проблема в том, что изменения в свойствах отдельного Foo
не приводят к тому, что массив аналогичным образом возвращается к пользовательским значениям по умолчанию. Я считаю, что причина этого обсуждается в 'Отношения ко многим 'раздела' Регистрация зависимых ключей 'в Руководстве по программированию наблюдения за значениями ключа: изменения в самом массиве контроллера массива наблюдаются, но изменения свойствам содержащихся элементов нет.
Несмотря на то, что я признаю это проблемой, я всю жизнь не могу понять, что на самом деле делать, чтобы это сработало. Когда я наблюдаю изменение Foo
, о каком объекте мне нужно сообщить и с каким сообщением, чтобы весь массив был записан обратно к пользовательским значениям по умолчанию - NSUserDefaults
, NSUserDefaultsController
, NSArrayController
? Хотелось бы, чтобы в документации Apple было больше, чем поверхностное упоминание об этой проблеме и был приведен реальный пример кода для ее решения - я все перепробовал и не могу найти волшебное заклинание.
Это похоже на Как получать уведомления об изменениях к моделям через NSArrayController, но я не могу сделать концептуальный скачок между тем, что он делает с пользовательским представлением, и использованием bind:toObject:withKeyPath:options:
.
Спасибо! :)