0

处理持久存储中的托管对象 ( NSManagedObject)read-only我试图使用瞬态属性来存储一些临时值。考虑到瞬态属性没有保存到持久存储中,我认为将它们用于缓存目的没有任何问题。但事实证明,即使在read-only存储的托管对象的瞬态属性中,您也无法写入数据。在NSManagedContext保存操作期间出现此错误

“无法将对象更新为只读存储”

(我确信只有瞬态属性被改变了。)

这是为什么?它可以被认为是一个NSManagedObjectContext错误吗?感谢您分享您的想法。

4

2 回答 2

2

这是预期的行为。不能修改只读存储。甚至在托管对象上下文中(在内存中)也没有。这就是“只读”的含义。几乎没有错误。

解决方案相当简单。创建第二个内存持久存储并通过Configurations将其集成到您的托管对象模型中。通过此商店跟踪您的临时财产。也许您必须创建一个“包装器”实体并通过关系将其链接到只读存储。

尽管努力创建一个更复杂的模型设置,但我认为这是一个可行的解决方案,因为一旦你完成了这个设置,你基本上可以忘记它。

于 2015-12-25T17:03:04.617 回答
1

您可以在实体类中声明自己的属性:

@interface DBExample : NSManagedObject

@property (nonatomic, strong) NSDictionary *userInfo;

@end

执行:

@implementation DBExample

@synthesize userInfo = _userInfo;

@end

顺便说一句,为什么要使用附加的只读持久存储来保存上下文?

于 2015-12-25T18:27:37.993 回答