CoreData:将临时属性与只读持久性存储一起使用

时间:2015-12-25 16:15:03

标签: ios core-data readonly transient nspersistentstore

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

  

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

(我确信只有瞬态属性发生了变化。)

为什么?它可以被视为NSManagedObjectContext的错误吗?感谢您分享您的想法。

2 个答案:

答案 0 :(得分:2)

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

解决方案非常简单。创建第二个内存中持久性存储,并通过配置将其集成到托管对象模型中。通过这家商店跟踪您的瞬态财产。也许您必须创建一个“包装器”实体,并通过关系将其链接到只读存储。

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

答案 1 :(得分:1)

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

@interface DBExample : NSManagedObject

@property (nonatomic, strong) NSDictionary *userInfo;

@end

实现:

@implementation DBExample

@synthesize userInfo = _userInfo;

@end

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