Hier ist die Situation:NSArrayController gesicherte Array Modifikation in Hintergrund-Thread
- NSTableView an einen NSArrayController gebunden
NSArrayController auf ein Array von AnalysisResult gebundenen Objekten
dynamic var analysisResults: [AnalysisResult] = [AnalysisResult]() // model for table view via resultsArrayController
Die NSTableView a hat Spalte "Ergebnis" an AnalysisResult.value gebunden
Wenn der Benutzer nun auf eine Schaltfläche klickt, löst er eine Analyse in einem Hintergrund-Thread aus und ändert die Objekte in "analyseResults". Es fügt kein Objekt aus dem Array hinzu oder entfernt es. Es ändert nur die Eigenschaft "value" der AnalysisResult-Objekte.
Nach der Analyse wird der UI-Thread aufgefordert, die Tabellenansicht zu aktualisieren.
aber hier ist das Problem: Ich erhalte die folgende Warnung:
CoreAnimation: warning, deleted thread with uncommitted CATransaction; created by:
0 QuartzCore 0x00007fff8f06369a _ZN2CA11Transaction4pushEv + 318
1 QuartzCore 0x00007fff8f06319a _ZN2CA11Transaction15ensure_implicitEv + 276
2 QuartzCore 0x00007fff8f069719 _ZN2CA5Layer13thread_flags_EPNS_11TransactionE + 37
3 QuartzCore 0x00007fff8f069668 _ZN2CA5Layer4markEPNS_11TransactionEjj + 64
4 QuartzCore 0x00007fff8f06b12b _ZN2CA5Layer25set_needs_display_in_rectERK6CGRect + 333
5 QuartzCore 0x00007fff8f06afdc -[CALayer setNeedsDisplayInRect:] + 25
6 AppKit 0x00007fff872d12e8 _NSBackingLayerSetNeedsDisplayInRect + 319
7 AppKit 0x00007fff872d11a3 -[_NSBackingLayer setNeedsDisplayInRect:] + 61
8 QuartzCore 0x00007fff8f06af9d -[CALayer setNeedsDisplay] + 62
9 AppKit 0x00007fff872d198b -[NSView(NSInternal) _setLayerNeedsDisplayInViewRect:] + 606
10 AppKit 0x00007fff8729f88e NSViewSetNeedsDisplayInRect + 945
11 AppKit 0x00007fff8729f4d6 -[NSView setNeedsDisplayInRect:] + 48
12 AppKit 0x00007fff8729f2ed -[NSView setNeedsDisplay:] + 81
13 AppKit 0x00007fff872f2be1 -[NSTextFieldCell setObjectValue:] + 88
14 AppKit 0x00007fff873e3026 -[NSControl setObjectValue:] + 135
15 AppKit 0x00007fff873ce0c6 -[_NSPlaceholderTextFieldPlugin showValue:inObject:] + 110
Die Warnung durch Modifizieren der Anordnung gebunden an den Arraycontroller verursacht wird. Ich möchte die Analyse nicht im Hauptthread durchführen, weil sie die Benutzeroberfläche einfriert.
Wie kann ich die Warnung vermeiden?