在我的小型核心數據應用程序中,我有一些NSTableView視圖綁定在實體模式下的NSArrayController控制器。集合被枚舉崩潰時發生了變化NSTableView,NSArrayController和NSThread
當我嘗試導入數據的一些大的量,以我的表在後臺線程,一些成功添加進口後(從幾十元到幾百個項目),我得到的碰撞與日誌:
嚴重的應用程序錯誤。在覈心數據更改處理期間捕獲異常:***集合在枚舉時發生了變化.NSHashTable(%@){ [5](entity:Word; id:0x1001dd4b0; data:{.......實體描述這裏....} ....
...和堆棧跟蹤:
#0 0x7fff83e0e2fa in mach_msg_trap
#1 0x7fff83e0e96d in mach_msg
#2 0x7fff8816c614 in _CGSSynchronizeWindowBackingStore
#3 0x7fff88152169 in _CGSLockWindow
#4 0x7fff88158cff in CGSDeviceLock
#5 0x7fff81ecae43 in ripd_Lock
#6 0x7fff81eca746 in ripl_BltShape
#7 0x7fff81ec7d86 in ripc_Render
#8 0x7fff81ec5317 in ripc_DrawRects
#9 0x7fff88158641 in CGContextFillRects
#10 0x7fff8818ee1a in CGContextFillRect
#11 0x7fff86e712f8 in NSRectFillUsingOperation
#12 0x7fff86f2152e in NSDrawWindowBackground
#13 0x7fff86ea16c2 in -[NSThemeFrame drawWindowBackgroundRect:]
#14 0x7fff86e6eb9a in -[NSFrameView drawThemeContentFill:inView:]
#15 0x7fff86e68aa5 in -[NSThemeFrame drawRect:]
#16 0x7fff86e68131 in -[NSView _drawRect:clip:]
#17 0x7fff86e65907 in -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
#18 0x7fff86e64ee8 in -[NSThemeFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
#19 0x7fff86e6179a in -[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:]
#20 0x7fff86ddaff6 in -[NSView displayIfNeeded]
#21 0x7fff86dd5ea2 in _handleWindowNeedsDisplay
#22 0x7fff80099a2d in __NSFireTimer
#23 0x7fff815aa678 in __CFRunLoopRun
#24 0x7fff815a884f in CFRunLoopRunSpecific
#25 0x7fff82c3991a in RunCurrentEventLoopInMode
#26 0x7fff82c3971f in ReceiveNextEventCommon
#27 0x7fff82c395d8 in BlockUntilNextEventMatchingListInMode
#28 0x7fff86dab29e in _DPSNextEvent
#29 0x7fff86daabed in -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:]
#30 0x7fff86d708d3 in -[NSApplication run]
#31 0x7fff86d695f8 in NSApplicationMain
假設有與更新表(列舉並非線程安全)的問題,我試圖解決此問題通過禁用控制器和表導入之前開始使用:
[wordsController setEditable:NO];
[wordsController setAutomaticallyPreparesContent:NO];
[wordsTable setEnabled:NO];
但它沒有幫助。在導入期間,我仍然看到新的實體被添加到故事中直到崩潰。
任何人都知道什麼是禁用NSArrayController跟蹤後臺處理時間的變化?或者也許這是其他問題?
非常感謝您的任何提示。
我不在導入代碼中使用交互,但是您正確地使用第二件事:我使用相同的託管對象上下文來導入和顯示。我將嘗試爲後臺線程使用另一個託管對象上下文。 – Lukasz 2010-10-13 17:23:40