我在CoreData中创建了一个实体,其中包含一个实现为NSDictionary的Transformable属性类型。 NSDictionary属性仅包含自定义类的值。自定义类的属性都是NSString类型。自定义类符合NSCoding实现:
- (无效)encodeWithCoder:(NSCoder *)编码器;
- (id)initWithCoder:(NSCoder *)编码器
首次保存实体时,包括Transformable(NSDictionary)类型在内的所有属性都正确保存在数据库中。当从DB获取并更新相同的实体(包括Transformable属性)时,它似乎正确更新。但是,当应用程序关闭然后重新打开时,获取Entity并不显示更新的Transformable属性类型,尽管NSDate和NSString类型的其余属性是最新的。 Transformable属性是原始保存的值,而不是更新的值。
这是KVO的问题还是在尝试将填充了自定义类的NSDictionary保存到CoreData时我错过了其他内容?
答案 0 :(得分:6)
您是否将值设置回NSManagedObject
? NSManagedObject
不会监视可变形对象的更改。您需要在保存之前调用相应的setter。
答案 1 :(得分:3)
我遇到了同样的问题,最终切换到NSDictionary作为transformable属性而不是NSMutableDictionary。只需将NSDictionary作为mutableCopy获取,处理它,将最终结果放入NSDictionary并将其重新插入到managedObject中。 诀窍对我来说还没有找到另一种解决方案。