В моем проекте у меня есть NSArrayController, связанный с сохранением стандартных значений по умолчанию (NSUserDefaults) приложения. Это само по себе прекрасно работает - добавленные объекты сохраняются и восстанавливаются, как ожидалось.Изменения в объектах в NSUserDefaults-bound NSArrayController не сохраняются
Однако, если я программно изменяю один из NSMutableDictionaries, содержащийся в массиве NSArrayController, ни одно из изменений не сохраняется. Только значения, установленные с созданием словаря, кажутся приличными.
Я подозреваю, что это потому, что просто вызов setObject: forValue: в словарях в массиве не сообщается о контроллере изменений, но я не уверен. Я делаю что-то неправильно?
UPDATE: С тех пор я перешел из NSMutableDictionary в пользовательский объект, который соответствует KVC (насколько я знаю, я использую свойства, о которых следует позаботиться), а также NSCoding. Он может и сохраняет и восстанавливает штраф - он просто несовместим. Он вроде бы экономит всякий раз, когда ему кажется, что он вместо того, чтобы обновлять свойство.
Есть ли причина, по которой вы не используете контроллер пользовательских настроек по умолчанию? И вы используете [arrayController willChangeValueForKey: @ ""] перед изменением вашего объекта, а затем с помощью [arrayController didChangeValueForKey: @ ""] сразу после? –
macandyp
Я использую пользовательские значения по умолчанию, потому что это имеет смысл в этом случае - массив - это просто список загрузок пользователя. Кроме того, в то время как я не использовал will/didchangevalueforkey, это больше не нужно - см. Обновленный оригинальный пост. –