Базовые Данные, не сохраняющие изменения в свойстве Transformable

Я сохраняю NSMutableArray в свойстве Transformable в моем Базовом Хранилище данных. Я могу создать объект правильно с данными в NSMutableArray и затем загрузите его из свойства и даже внесите изменения. Когда я обхожу свое приложение и повторно получаю доступ к нему, мои изменения сохраняются. Однако, когда я перезагружаю приложение, изменения не сохранили в базовом хранилище данных. Другие изменения в объекте - например, изменение его заголовка, который сохраняется как NSString - сохраняются, даже когда я вышел и вновь открыл приложение.

Я читал в другом вопросе о StackOverflow, что Поддающиеся преобразованию атрибуты автоматически не уведомляются относительно изменений, и что я должен был бы назвать "соответствующий метод set перед сохранением". Однако даже с помощью фактических функций метода set - я также попытался звонить didChangeValueForKey - свойство не сохраняется правильно. Какие-либо хорошие идеи?

7
задан Community 23 May 2017 в 12:16
поделиться

1 ответ

Вы должны, как вы отмечаете, "переустановить" свойство transformable:

id temp = [myManagedObject myTransformableAttribute];

//.. do something with temp

[myManagedObject setMyTransformableAttribute:temp];

Нет никакого способа, чтобы Core Data мог надлежащим образом контролировать произвольный объект transformable, чтобы он мог "делать правильные вещи" автоматически.

Более того, вы должны быть уверены, что действительно сохраняете контекст управляемого объекта после изменения атрибута transformable:

NSError *error;
if(![[myManagedObject managedObjectContext] save:&error]) {
  //present error
}

Во время одного запуска программы несохраненные изменения будут видны, поскольку контекст управляемого объекта сохраняет измененные экземпляры в памяти. Однако без сохранения контекста эти изменения не будут сохранены на диске.

6
ответ дан 7 December 2019 в 09:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: