我得到了:
***由于未捕获的异常'NSRangeException'而终止应用程序,原因是:'无法移除观察者< NSArrayController>对于来自< MyElement>的关键路径“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
答案 0 :(得分:0)
似乎我无法在后台线程中修改这些对象,并且我认为没有办法暂时挂起观察者,所以我将所有属性添加到后台线程上的字典然后再添加到主线程调用:
[element setValuesForKeysWithDictionary:properties];