2016-11-28 4 views
0

„count“ Ich erhalte:kann kein Beobachter entfernen <NSArrayController> für den Schlüsselpfad

*** app aufgrund nicht abgefangene Ausnahme ‚NSRangeException‘ Abschluss Grund: ‚Es kann keine Beobachter < NSArrayController> entfernen für den Schlüsselpfad "count" von < MyElement> weil es nicht als Beobachter registriert ist.

Ich habe einen Hintergrund NSOperation, der die Eigenschaften von MyElement auffüllt. Diese MyElement-Objekte befinden sich in einem Array, das von NSArrayController verwaltet wird und an ein NSTableView gebunden ist.

Könnte dies mit dem Ändern von Eigenschaften in einem Hintergrundthread zusammenhängen, und wenn ja, wie kann ich das deaktivieren, sodass die Tabelle diese Änderungen erst sehen kann, wenn sie abgeschlossen sind (und im Hauptthread aktualisiert werden können)?

Ich habe es durch eine „Größe“ sortieren gesetzt (NSNumber) Immobilien und

Der Absturz wie folgt aussieht:

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 

Antwort

0

Es scheint, dass ich diese Objekte in einem Hintergrund-Thread nicht ändern kann , und ich sehe keine Möglichkeit, einen Beobachter vorübergehend auszusetzen, stattdessen füge ich stattdessen alle Eigenschaften zu einem Wörterbuch im Hintergrundthread hinzu und dann auf dem Hauptthread calling:

[element setValuesForKeysWithDictionary:properties]; 
Verwandte Themen