0

В моем проекте у меня есть NSArrayController, связанный с сохранением стандартных значений по умолчанию (NSUserDefaults) приложения. Это само по себе прекрасно работает - добавленные объекты сохраняются и восстанавливаются, как ожидалось.Изменения в объектах в NSUserDefaults-bound NSArrayController не сохраняются

Однако, если я программно изменяю один из NSMutableDictionaries, содержащийся в массиве NSArrayController, ни одно из изменений не сохраняется. Только значения, установленные с созданием словаря, кажутся приличными.

Я подозреваю, что это потому, что просто вызов setObject: forValue: в словарях в массиве не сообщается о контроллере изменений, но я не уверен. Я делаю что-то неправильно?

UPDATE: С тех пор я перешел из NSMutableDictionary в пользовательский объект, который соответствует KVC (насколько я знаю, я использую свойства, о которых следует позаботиться), а также NSCoding. Он может и сохраняет и восстанавливает штраф - он просто несовместим. Он вроде бы экономит всякий раз, когда ему кажется, что он вместо того, чтобы обновлять свойство.

+0

Есть ли причина, по которой вы не используете контроллер пользовательских настроек по умолчанию? И вы используете [arrayController willChangeValueForKey: @ ""] перед изменением вашего объекта, а затем с помощью [arrayController didChangeValueForKey: @ ""] сразу после? – macandyp

+0

Я использую пользовательские значения по умолчанию, потому что это имеет смысл в этом случае - массив - это просто список загрузок пользователя. Кроме того, в то время как я не использовал will/didchangevalueforkey, это больше не нужно - см. Обновленный оригинальный пост. –

ответ

0

Ну, я закончил тем, что просто написал собственный контроллер, ответственный за загрузку и сохранение загрузок в свой собственный файл plist. Это экономит, когда об этом сообщается обязательно, поэтому проблема решена.