2014-02-20 57 views
0

我有一个方法,使用NSManagedObjectContext的副本在后台线程中运行,NSManagedObjectContext在后台线程根据Apple建议启动时特别生成。从主线程managedobjectcontext从后台线程请求标量值

在这个方法中,它调用一个类的共享实例,这个共享实例用于管理属性值。

是管理性质的共享实例使用的NSManagedObjectContext在主线程,现在即使主线程在后台线程的方法不应该使用的NSManagedObjectContext,应该不是真的,如果共享的属性管理类做或做重要不使用这样的上下文,因为它只是将标量值返回到后台线程(至少这是我的理解)。

那么,为什么在从后台线程调用时通过主线程上下文检索值时共享属性类会挂起?它不需要传递一个NSManagedObject,甚至不需要更新一个,所以我看不出它会产生什么差异。

我可以理解,我的方法可能是错误的,但我想在基本层面理解为什么会这样。目前我无法理解整个系统足以超越苹果推荐的实现方法,这只是我不喜欢的黑魔法方法。

任何帮助,非常感谢。

回答

0

是否使用:

[theContext performBlock:^{ 
    // do stuff on the context's queue, launch asynchronously 
}]; 

- 或 -

[theContext performBlockAndWait:^{ 
    // do stuff on the context's queue, run synchronously 
}]; 

- 只是工作适合你?如果是这样,你就完成了。

如果没有,请长时间仔细研究您的上下文是如何设置,传递和使用的。如果它们都共享一个根上下文,那么只要在当前上下文中始终查找任何对象ID,就应该能够轻松地在它们之间“移动”数据。

上下文绑定到线程/队列,基本上,所以总是使用给定的上下文作为参考,以便在哪里工作。 performBlock:是这样做的一种方法。

+0

我会尽快给出结果并对结果提供反馈。 –