无法删除观察者<nsarraycontroller>以获取密钥路径“count”

时间:2016-11-28 23:31:17

标签: binding nsoperation nsrangeexception

我得到了:

  

***由于未捕获的异常'NSRangeException'而终止应用程序,原因是:'无法移除观察者&lt; NSArrayController&gt;对于来自&lt; MyElement&gt;的关键路径“count”因为它没有注册为观察员。'

我有一个背景NSOperation,它填充了MyElement的属性。这些MyElement对象位于由NSArrayController管理的数组中,并绑定到NSTableView。

这可能与更改后台线程的属性有关吗?如果是这样,我该如何禁用它,以便表在完成之前不会看到这些更改(并且可以在主线程上更新)?

我将它设置为按“大小”(NSNumber)属性和

排序

崩溃看起来像:

0 CoreFoundation   0x00007fff87ec44f2 __exceptionPreprocess + 178
1 libobjc.A.dylib  0x00007fff85d6cf7e objc_exception_throw + 48
2 CoreFoundation   0x00007fff87f2b4bd +[NSException raise:format:] + 205
3 Foundation       0x00007fff8755d786 -[NSObject(NSKeyValueObserverRegistration) _removeObserver:forProperty:] + 504
4 Foundation       0x00007fff8755d533 -[NSObject(NSKeyValueObserverRegistration) removeObserver:forKeyPath:] + 108
5 Foundation       0x00007fff875ce1a4 -[NSObject(NSKeyValueObserverRegistration) 
...
15  Foundation     0x00007fff87572a69 _NSSetObjectValueAndNotify + 274
16  MyApp          0x0000000100051a10 -[MyPropertiesOperation main] + 496

1 个答案:

答案 0 :(得分:0)

似乎我无法在后台线程中修改这些对象,并且我认为没有办法暂时挂起观察者,所以我将所有属性添加到后台线程上的字典然后再添加到主线程调用:

[element setValuesForKeysWithDictionary:properties];