2016-11-28 54 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];