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

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

Проблема:

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

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

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

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

Спасибо,

Miraaj

1 Ответ

1 голос
/ 09 октября 2010

В журнале сбоя указано:

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...