Сбой приложения, когда пользователь вносит изменения в табличное представление, и данные в нем обновляются

В моем приложении я использовал определенные представления таблиц, их данные обновляются в фоновом потоке, если пользователь вносит и сохраняет изменения.

Проблема в том-

когда пользователь вносит некоторые изменения в строку таблицы, и ее данные обновляются в фоновом режиме из-за изменений, внесенных каким-либо другим пользователем, приложение аварийно завершает работу.

Может ли кто-нибудь предложить мне какое-то решение для этого?

Ниже приведена часть отчета о сбое:

Process:         RCS [153]

Path:            /Applications/RCS.app/Contents/MacOS/RCS
Identifier:      com.tprf.RCS

Version:         1.5.10 build-0212 (1.5.10)
Code Type:       X86 (Native)
Parent Process:  launchd [96]

Date/Time:       2010-10-07 11:40:15.595 -0700
OS Version:      Mac OS X 10.6.4 (10F569)
Report Version:  6

Interval Since Last Report:          297915 sec
Crashes Since Last Report:           2
Per-App Interval Since Last Report:  213604 sec
Per-App Crashes Since Last Report:   1
Anonymous UUID:                      4037E18D-81EF-461F-95D5-9E7D7C5701A6

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000c0e9bb1a
Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Application Specific Information:
objc_msgSend() selector name: objectForKey:


Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   libobjc.A.dylib                 0x97a4aedb objc_msgSend + 27
1   com.apple.AppKit                0x90c558ec -[NSTableView _delegateWillDisplayCell:forColumn:row:] + 62
2   com.apple.AppKit                0x90bd29f5 -[NSTableView preparedCellAtColumn:row:] + 1362
3   com.apple.AppKit                0x90becacc -[NSTableView _drawContentsAtRow:column:withCellFrame:] + 56
4   com.apple.AppKit                0x90bebb3a -[NSTableView drawRow:clipRect:] + 1131
5   com.apple.AppKit                0x90beb572 -[NSTableView drawRowIndexes:clipRect:] + 360
6   com.apple.AppKit                0x90be9f4b -[NSTableView drawRect:] + 1144
7   com.apple.AppKit                0x90bdfa36 -[NSView _drawRect:clip:] + 3510
8   com.apple.AppKit                0x90bde6d4 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 1600
9   com.apple.AppKit                0x90bdea09 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
10  com.apple.AppKit                0x90bdea09 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
11  com.apple.AppKit                0x90bdea09 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
12  com.apple.AppKit                0x90bdea09 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
13  com.apple.AppKit                0x90bdea09 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
14  com.apple.AppKit                0x90bdea09 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
15  com.apple.AppKit                0x90bdea09 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
16  com.apple.AppKit                0x90bdea09 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
17  com.apple.AppKit                0x90bdea09 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
18  com.apple.AppKit                0x90bdea09 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
19  com.apple.AppKit                0x90bdea09 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
20  com.apple.AppKit                0x90bdea09 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
21  com.apple.AppKit                0x90bdea09 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
22  com.apple.AppKit                0x90bdea09 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
23  com.apple.AppKit                0x90bdcbf3 -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 711
24  com.apple.AppKit                0x90bdc767 -[NSThemeFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 265
25  com.apple.AppKit                0x90bd90ae -[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] + 3309
26  com.apple.AppKit                0x90b39d3f -[NSView displayIfNeeded] + 818
27  com.apple.AppKit                0x90b03050 -[NSWindow displayIfNeeded] + 204
28  com.apple.AppKit                0x90b34572 _handleWindowNeedsDisplay + 696
29  com.apple.CoreFoundation        0x996812c2 __CFRunLoopDoObservers + 1186
30  com.apple.CoreFoundation        0x9963d9bd __CFRunLoopRun + 557
31  com.apple.CoreFoundation        0x9963d094 CFRunLoopRunSpecific + 452
32  com.apple.CoreFoundation        0x9963cec1 CFRunLoopRunInMode + 97
33  com.apple.HIToolbox             0x905ecf9c RunCurrentEventLoopInMode + 392
34  com.apple.HIToolbox             0x905ecc8d ReceiveNextEventCommon + 158
35  com.apple.HIToolbox             0x905ecbd6 BlockUntilNextEventMatchingListInMode + 81
36  com.apple.AppKit                0x90b0aa89 _DPSNextEvent + 847
37  com.apple.AppKit                0x90b0a2ca -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 156
38  com.apple.AppKit                0x90acc55b -[NSApplication run] + 821
39  com.apple.AppKit                0x90ac45ed NSApplicationMain + 574

Спасибо,

Мирадж


person Devarshi    schedule 09.10.2010    source источник


Ответы (1)


В журнале сбоев говорится:

Application Specific Information:
objc_msgSend() selector name: objectForKey:

Это означает, что у вас произошел сбой при попытке отправить сообщение objectForKey:.

Из журнала сбоев неясно, является ли это вашей реализацией tableView:willDisplayCell:forTableColumn:row:, которая дает сбой, или NSTableView ищет что-то, чтобы отправить это сообщение делегата. Если первое, то вы, вероятно, не сохраняете и не копируете словарь там, где должны. Если это последнее, то вы, вероятно, не сохраняете объект, который является делегатом табличного представления, где вы должны.

В любом случае шаблон Zombies в Instruments сообщит вам, какому объекту он пытался отправить сообщение, и какие сообщения об освобождении и автоматическом освобождении объект получил. Оттуда вы можете определить, какое сообщение об освобождении или автоосвобождении было ненужным (если оно есть), или какой объект, который должен сохранять объект, не является таковым.

person Peter Hosey    schedule 09.10.2010