Core Data不保存对Transformable属性的更改

时间:2010-06-16 21:05:07

标签: iphone core-data

我在Core Data商店的Transformable属性中保存NSMutableArray。我可以使用NSMutableArray中的数据正确创建实体,然后将其加载到属性中,甚至进行更改。当我浏览我的应用并重新访问它时,我的更改会被保存。但是,当我重新加载应用程序时,更改尚未保存在核心数据存储中。对实体的其他更改 - 例如更改其标题(保存为NSString)即使在我退出并重新打开应用时也会保存。

我在another StackOverflow question中读到,Transformable属性不会自动通知更改,并且我必须在保存之前调用“相应的setter”。然而,即使使用实际的setter函数 - 我也尝试调用didChangeValueForKey - 属性未正确保存。有什么好主意吗?

2 个答案:

答案 0 :(得分:6)

如您所知,您必须“重新设置”可转换的属性:

id temp = [myManagedObject myTransformableAttribute];

//.. do something with temp

[myManagedObject setMyTransformableAttribute:temp];

Core Data无法正确监控任意可变形对象,因此它可以自动“做正确的事情”。

此外,您必须确保在修改可转换属性后实际保存了托管对象上下文:

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

在单次运行程序期间,未保存的更改将显示为可见,因为托管对象上下文将修改后的实例保留在内存中。但是,如果不保存上下文,这些更改将不会保留到磁盘。

答案 1 :(得分:0)

我注意到你不仅需要重新设置属性。但是你还需要另一个实例。这就是为什么它不能与NSMutableArray

一起使用
Transformable *copy = [managedObject.transformableProperty copy];

// do stuff

managedObject.transformableProperty = copy;