无法删除观察者...来自...的关键路径“...”因为它未注册为观察者

时间:2011-08-12 23:35:07

标签: cocoa core-data key-value-observing nsarraycontroller

我有一个包含两个实体的核心数据模型:A和B. A与一个或多个Bs有关系。 B有一个属性bValue。

我创建了一个类的许多实例,其中一些实例调用了一个通知。此通知称为创建新B实体并将其添加到A的方法。使用NSThread创建实例以使UI更具响应性。

这样可以正常工作,然后调用的通知不会太多。或者至少在“同一时间”没有太多。

然后我得到了这个例外:

Cannot remove an observer <NSArrayController 0x10016c150> for the key path "bValue" from <bValue 0x104e55c30> because it is not registered as an observer.

是的,B绑定到NSArrayController。

  • 如果我从NIB文件中删除此ArrayController,一切正常 很好(除了ArrayController必须做的所有事情)
  • 如果我创建了许多B并将其添加到A其他地方(通知方法之外) 一切都可以找到,也可以使用ArrayController。

有人能帮助我吗?

(请原谅我的发音不好。)

1 个答案:

答案 0 :(得分:2)

你说你在一个单独的线程上做这项工作。如果是这样,您需要确保使用单独的NSManagedObjectContext。您不能在多个线程上使用相同的NSManagedObjectContext,也不能在另一个MOC中使用与一个MOC关联的NSManagedObject。每个线程都需要独立地与CoreData交互。