2016-11-28 21 views
0

我得到:无法删除观察员<NSArrayController的>的关键路径“计数”

***终止应用程序由于未捕获的异常“NSRangeException”,理由是:“无法删除观察员< NSArrayController的>关键路径“count”来自< MyElement>,因为它没有注册为观察者。'

我有一个背景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 

回答

0

看来我不能在后台线程修改这些对象,并且我看不到暂停观察者的方式,所以我将所有属性添加到后台线程中的字典,然后在主线程中调用:

[element setValuesForKeysWithDictionary:properties];