NSManagedObject - 跨线程设置自定义实例变量

时间:2014-04-28 03:22:42

标签: objective-c core-data nsmanagedobject

我有一个NSManagedObject类,我为其添加了一个自定义实例变量,使其成为一个属性并使用@synthesize(但在Core Data模型中不使用'transient')。如果我设置值并稍后在同一个线程中读取它,这可以正常工作;但如果我在另一个线程中设置此属性的值,它仍然在主线程上显示为nil。

举个例子,想一想:

@interface Person : NSManagedObject{

}
@property (nonatomic, strong) UIImage *personImage; // unmodeled

如果我在后台线程中设置personImage对象,它在主线程上仍然是'nil'。

有没有办法解决这个问题,以便属性实际存储跨线程的值?

1 个答案:

答案 0 :(得分:2)

没有办法“修复”它,因为它没有被破坏。每个上下文(以及每个线程)将具有NSManagedObject的单独实例。它们是内存中完全不同的对象,不会共享实例变量。您需要在每个实例中初始化该实例变量。

这就是awakeFromInsertawakeFromFetch触发每个上下文的原因。它为您提供了初始化这些实例变量的机会。