我在Core Data商店的Transformable属性中保存NSMutableArray
。我可以使用NSMutableArray
中的数据正确创建实体,然后将其加载到属性中,甚至进行更改。当我浏览我的应用并重新访问它时,我的更改会被保存。但是,当我重新加载应用程序时,更改尚未保存在核心数据存储中。对实体的其他更改 - 例如更改其标题(保存为NSString
)即使在我退出并重新打开应用时也会保存。
我在another StackOverflow question中读到,Transformable属性不会自动通知更改,并且我必须在保存之前调用“相应的setter”。然而,即使使用实际的setter函数 - 我也尝试调用didChangeValueForKey
- 属性未正确保存。有什么好主意吗?
答案 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;