all. when I use NSTableView, it will give me the following errors as long as it reaches in this function.
-(id)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
USBInfor* usbInfor = [_tableContent objectAtIndex:row];
NSString* identifier = [tableColumn identifier];
return [usbInfor valueForKey:identifier];
}
I created a usbInfor class to save name, size, path, and type of USB. And I add those variables into _tableContent NSMutableArray.
USBInfor *usbinfor = [[USBInfor alloc]init];
usbinfor.name = [mountPath substringFromIndex:9];
usbinfor.path = mountPath;
usbinfor.size = formattingSize;
usbinfor.type = type;
[_tableContent addObject:usbinfor];
I created 3 columns in xib file and each of the identifier I named the same as the variables' name which are name, path, and size.
Here are the errors:
2013-05-08 22:56:34.157 TESTING[7760:303] -[__NSCFString setFrame:]: unrecognized selector sent to instance 0x10022a3d0
2013-05-08 22:56:34.158 TESTING[7760:303] An uncaught exception was raised
2013-05-08 22:56:34.159 TESTING[7760:303] -[__NSCFString setFrame:]: unrecognized selector sent to instance 0x10022a3d0
2013-05-08 22:56:34.162 TESTING[7760:303] (
0 CoreFoundation 0x00007fff81e8ab06 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff81a003f0 objc_exception_throw + 43
2 CoreFoundation 0x00007fff81f2140a -[NSObject(NSObject) doesNotRecognizeSelector:] + 186
3 CoreFoundation 0x00007fff81e7902e ___forwarding___ + 414
4 CoreFoundation 0x00007fff81e78e18 _CF_forwarding_prep_0 + 232
5 AppKit 0x00007fff8c456a73 -[NSTableRowData _addViewToRowView:atColumn:row:] + 533
6 AppKit 0x00007fff8c45666f -[NSTableRowData _addViewsToRowView:atRow:] + 151
7 AppKit 0x00007fff8c454c05 -[NSTableRowData _addRowViewForVisibleRow:withPriorView:] + 415
8 AppKit 0x00007fff8c45498a -[NSTableRowData _addRowViewForVisibleRow:withPriorRowIndex:inDictionary:withRowAnimation:] + 272
9 AppKit 0x00007fff8c453c59 -[NSTableRowData _unsafeUpdateVisibleRowEntries] + 740
10 AppKit 0x00007fff8c4537f1 -[NSTableRowData updateVisibleRowViews] + 119
11 AppKit 0x00007fff8c42b87b -[NSTableView viewWillDraw] + 165
12 AppKit 0x00007fff8c3091ed __22-[NSView viewWillDraw]_block_invoke_0 + 307
13 CoreFoundation 0x00007fff81e834a6 __NSArrayEnumerate + 582
14 AppKit 0x00007fff8c308f2d -[NSView viewWillDraw] + 244
15 AppKit 0x00007fff8c3091ed __22-[NSView viewWillDraw]_block_invoke_0 + 307
16 CoreFoundation 0x00007fff81e834a6 __NSArrayEnumerate + 582
17 AppKit 0x00007fff8c308f2d -[NSView viewWillDraw] + 244
18 AppKit 0x00007fff8c393aa5 -[NSScrollView viewWillDraw] + 45
19 AppKit 0x00007fff8c3091ed __22-[NSView viewWillDraw]_block_invoke_0 + 307
20 CoreFoundation 0x00007fff81e834a6 __NSArrayEnumerate + 582
21 AppKit 0x00007fff8c308f2d -[NSView viewWillDraw] + 244
22 AppKit 0x00007fff8c3091ed __22-[NSView viewWillDraw]_block_invoke_0 + 307
23 CoreFoundation 0x00007fff81e834a6 __NSArrayEnumerate + 582
24 AppKit 0x00007fff8c308f2d -[NSView viewWillDraw] + 244
25 AppKit 0x00007fff8c308584 -[NSView _sendViewWillDrawInRect:clipRootView:] + 1525
26 AppKit 0x00007fff8c2d49b1 -[NSView displayIfNeeded] + 1044
27 AppKit 0x00007fff8c391a48 -[NSWindow _reallyDoOrderWindow:relativeTo:findKey:forCounter:force:isModal:] + 1377
28 AppKit 0x00007fff8c391068 -[NSWindow _doOrderWindow:relativeTo:findKey:forCounter:force:isModal:] + 940
29 AppKit 0x00007fff8c390c4f -[NSWindow orderWindow:relativeTo:] + 159
30 AppKit 0x00007fff8c292266 -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1424
31 AppKit 0x00007fff8c27114d loadNib + 317
32 AppKit 0x00007fff8c270679 +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 219
33 AppKit 0x00007fff8c3c35bc +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] + 140
34 AppKit 0x00007fff8c270398 +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 626
35 AppKit 0x00007fff8c26ca2f NSApplicationMain + 398
36 TESTING 0x00000001000012b2 main + 34
37 TESTING 0x0000000100001264 start + 52
)
2013-05-08 22:56:34.164 TESTING[7760:303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString setFrame:]: unrecognized selector sent to instance 0x10022a3d0'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff81e8ab06 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff81a003f0 objc_exception_throw + 43
2 CoreFoundation 0x00007fff81f2140a -[NSObject(NSObject) doesNotRecognizeSelector:] + 186
3 CoreFoundation 0x00007fff81e7902e ___forwarding___ + 414
4 CoreFoundation 0x00007fff81e78e18 _CF_forwarding_prep_0 + 232
5 AppKit 0x00007fff8c456a73 -[NSTableRowData _addViewToRowView:atColumn:row:] + 533
6 AppKit 0x00007fff8c45666f -[NSTableRowData _addViewsToRowView:atRow:] + 151
7 AppKit 0x00007fff8c454c05 -[NSTableRowData _addRowViewForVisibleRow:withPriorView:] + 415
8 AppKit 0x00007fff8c45498a -[NSTableRowData _addRowViewForVisibleRow:withPriorRowIndex:inDictionary:withRowAnimation:] + 272
9 AppKit 0x00007fff8c453c59 -[NSTableRowData _unsafeUpdateVisibleRowEntries] + 740
10 AppKit 0x00007fff8c4537f1 -[NSTableRowData updateVisibleRowViews] + 119
11 AppKit 0x00007fff8c42b87b -[NSTableView viewWillDraw] + 165
12 AppKit 0x00007fff8c3091ed __22-[NSView viewWillDraw]_block_invoke_0 + 307
13 CoreFoundation 0x00007fff81e834a6 __NSArrayEnumerate + 582
14 AppKit 0x00007fff8c308f2d -[NSView viewWillDraw] + 244
15 AppKit 0x00007fff8c3091ed __22-[NSView viewWillDraw]_block_invoke_0 + 307
16 CoreFoundation 0x00007fff81e834a6 __NSArrayEnumerate + 582
17 AppKit 0x00007fff8c308f2d -[NSView viewWillDraw] + 244
18 AppKit 0x00007fff8c393aa5 -[NSScrollView viewWillDraw] + 45
19 AppKit 0x00007fff8c3091ed __22-[NSView viewWillDraw]_block_invoke_0 + 307
20 CoreFoundation 0x00007fff81e834a6 __NSArrayEnumerate + 582
21 AppKit 0x00007fff8c308f2d -[NSView viewWillDraw] + 244
22 AppKit 0x00007fff8c3091ed __22-[NSView viewWillDraw]_block_invoke_0 + 307
23 CoreFoundation 0x00007fff81e834a6 __NSArrayEnumerate + 582
24 AppKit 0x00007fff8c308f2d -[NSView viewWillDraw] + 244
25 AppKit 0x00007fff8c308584 -[NSView _sendViewWillDrawInRect:clipRootView:] + 1525
26 AppKit 0x00007fff8c2d49b1 -[NSView displayIfNeeded] + 1044
27 AppKit 0x00007fff8c391a48 -[NSWindow _reallyDoOrderWindow:relativeTo:findKey:forCounter:force:isModal:] + 1377
28 AppKit 0x00007fff8c391068 -[NSWindow _doOrderWindow:relativeTo:findKey:forCounter:force:isModal:] + 940
29 AppKit 0x00007fff8c390c4f -[NSWindow orderWindow:relativeTo:] + 159
30 AppKit 0x00007fff8c292266 -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1424
31 AppKit 0x00007fff8c27114d loadNib + 317
32 AppKit 0x00007fff8c270679 +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 219
33 AppKit 0x00007fff8c3c35bc +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] + 140
34 AppKit 0x00007fff8c270398 +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 626
35 AppKit 0x00007fff8c26ca2f NSApplicationMain + 398
36 TESTING 0x00000001000012b2 main + 34
37 TESTING 0x0000000100001264 start + 52
)
libc++abi.dylib: terminate called throwing an exception
It has to run under OS X 10.5 and the base SDK OS X 10.7
Thanks !!
The method, tableView:viewForTableColumn:row: needs to return an NSView or a subclass of NSView. It looks like [usbInfor valueForKey:identifier], where identifier is "name", returns a string ([mountPath substringFromIndex:9]). I don't know what you're trying to do there, but that's clearly wrong.
[tableColumn identifier] is used to identify a column name. So it should be something like
NSString *filename = [[itemArray1 objectAtIndex:rowIndex] objectForKey:key1a];
NSString *path = [[itemArray1 objectAtIndex:rowIndex] objectForKey:key1b];
NSString *identifier = [tableColumn identifier];
if ([identifier] isEqualToString:#"whatever a column name is"]) {
return filename;
}
else if ([identifier] isEqualToString:#"whatever a column name is"]) {
return path;
}
...
Related
So I was messing around with the Document Based Application, and I'm trying get the save file to work. I have a file format save to .lgre and whenever I hit save, I'll select location, and then nothing happens except that I get this in that console. Can someone tell me whats going wrong?
0 CoreFoundation 0x00007fff8c64b64c __exceptionPreprocess + 172
1 libobjc.A.dylib 0x00007fff8e9ca6de objc_exception_throw + 43
2 CoreFoundation 0x00007fff8c64b4fd +[NSException raise:format:] + 205
3 Ligre UI 0x00000001000011b1 -[Document dataOfType:error:] + 129
4 AppKit 0x00007fff933d8fcf -[NSDocument writeToURL:ofType:error:] + 861
5 AppKit 0x00007fff933dbf03 -[NSDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:] + 494
6 AppKit 0x00007fff933dae6b -[NSDocument _writeSafelyToURL:ofType:forSaveOperation:forceTemporaryDirectory:error:] + 850
7 AppKit 0x00007fff933dbb93 -[NSDocument _writeSafelyToURL:ofType:forSaveOperation:error:] + 28
8 AppKit 0x00007fff933dbd01 -[NSDocument writeSafelyToURL:ofType:forSaveOperation:error:] + 357
9 AppKit 0x00007fff933e8fc5 __66-[NSDocument saveToURL:ofType:forSaveOperation:completionHandler:]_block_invoke_22307 + 240
10 AppKit 0x00007fff933e8ec6 __66-[NSDocument saveToURL:ofType:forSaveOperation:completionHandler:]_block_invoke2304 + 365
11 AppKit 0x00007fff933e72e6 __66-[NSDocument saveToURL:ofType:forSaveOperation:completionHandler:]_block_invoke2176 + 1587
12 AppKit 0x00007fff93426882 __62-[NSDocumentController(NSInternal) _onMainThreadInvokeWorker:]_block_invoke1881 + 175
13 CoreFoundation 0x00007fff8c56954c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
14 CoreFoundation 0x00007fff8c55b655 __CFRunLoopDoBlocks + 341
15 CoreFoundation 0x00007fff8c55b196 __CFRunLoopRun + 1814
16 CoreFoundation 0x00007fff8c55a838 CFRunLoopRunSpecific + 296
17 HIToolbox 0x00007fff9421243f RunCurrentEventLoopInMode + 235
18 HIToolbox 0x00007fff942121ba ReceiveNextEventCommon + 431
19 HIToolbox 0x00007fff94211ffb _BlockUntilNextEventMatchingListInModeWithFilter + 71
20 AppKit 0x00007fff92fbe6d1 _DPSNextEvent + 964
21 AppKit 0x00007fff92fbde80 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 194
22 AppKit 0x00007fff92fb1e23 -[NSApplication run] + 594
23 AppKit 0x00007fff92f9d2d4 NSApplicationMain + 1832
24 Ligre UI 0x0000000100001302 main + 34
25 libdyld.dylib 0x00007fff8cea45c9 start + 1
26 ??? 0x0000000000000003 0x0 + 3
)
Did you override dataOfType or one of the writeToURL methods?
See the discussion here: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSDocument_Class/index.html#//apple_ref/occ/instm/NSDocument/dataOfType:error:
I've been trying to find out what's wrong with this piece of code: I have an NSTextView which string I want to update when the user clicks in one one my table views. For now on, I'm just trying to get it to display the string "Notes".
Any idea on what I am doing wrong ? I looked into beginEditing: and endEditing: without any success.
//
// MyAppDelegate.h
#property IBOutlet NSTextView* stickyNoteContainer;
//
// MyAppDelegate.m
-(void)updateOverview{
[stickyNoteContainer setString:#"Notes"];
}
Here's the stack :
MyApp[1176:303] *** -[NSBigMutableString _getBlockStart:end:contentsEnd:forRange:stopAtLineSeparators:]: Range or index out of bounds
2013-09-23 15:04:12.084 MyApp[1176:303] (
0 CoreFoundation 0x00007fff917eaf56 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff95bb7d5e objc_exception_throw + 43
2 CoreFoundation 0x00007fff917ead8a +[NSException raise:format:arguments:] + 106
3 CoreFoundation 0x00007fff917ead14 +[NSException raise:format:] + 116
4 Foundation 0x00007fff955afbc5 -[NSString _getBlockStart:end:contentsEnd:forRange:stopAtLineSeparators:] + 160
5 Foundation 0x00007fff955afb1e -[NSString getParagraphStart:end:contentsEnd:forRange:] + 40
6 AppKit 0x00007fff8e5c1cd7 _NSFastFillAllLayoutHolesForGlyphRange + 1040
7 AppKit 0x00007fff8eb31bb4 -[NSTextView(NSPrivate) _ensureLayoutCompleteForVisibleRectWithExtensionFactor:minimumExtensionDistance:repetitions:] + 563
8 AppKit 0x00007fff8eb2d13c -[NSTextView(NSPrivate) _ensureLayoutCompleteForVisibleRectWithExtension:] + 45
9 AppKit 0x00007fff8e6b9650 -[NSTextView setNeedsDisplayInRect:avoidAdditionalLayout:] + 2078
10 AppKit 0x00007fff8e6bf1c1 -[NSLayoutManager(NSPrivate) _resizeTextViewForTextContainer:] + 5690
11 AppKit 0x00007fff8e5b0110 -[NSLayoutManager(NSPrivate) _recalculateUsageForTextContainerAtIndex:] + 2678
12 AppKit 0x00007fff8e96b948 _enableTextViewResizing + 209
13 AppKit 0x00007fff8e5a8454 -[NSLayoutManager textStorage:edited:range:changeInLength:invalidatedRange:] + 582
14 AppKit 0x00007fff8e5a81f6 -[NSTextStorage _notifyEdited:range:changeInLength:invalidatedRange:] + 155
15 AppKit 0x00007fff8e681133 -[NSTextStorage processEditing] + 205
16 AppKit 0x00007fff8e681cab -[NSTextStorage endEditing] + 81
17 MyApp 0x0000000100007938 -[MyAppDelegate updateOverview] + 1624
18 MyApp 0x0000000100008751 -[MyAppDelegate tableViewSelectionDidChange:] + 177
19 Foundation 0x00007fff95550d0e __-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_1 + 47
20 CoreFoundation 0x00007fff917937ba _CFXNotificationPost + 2634
21 Foundation 0x00007fff9553cfc3 -[NSNotificationCenter postNotificationName:object:userInfo:] + 65
22 AppKit 0x00007fff8e674049 -[NSTableView _sendSelectionChangedNotificationForRows:columns:] + 203
23 AppKit 0x00007fff8e64ab0a -[NSTableView _enableSelectionPostingAndPost] + 425
24 AppKit 0x00007fff8e670e58 -[NSTableView mouseDown:] + 5030
25 AppKit 0x00007fff8e5d6c98 -[NSWindow sendEvent:] + 6306
26 AppKit 0x00007fff8e5703a5 -[NSApplication sendEvent:] + 5593
27 AppKit 0x00007fff8e506a0e -[NSApplication run] + 555
28 AppKit 0x00007fff8e782eac NSApplicationMain + 867
29 MyApp 0x0000000100002002 main + 34
30 MyApp 0x0000000100001fd4 start + 52
)
EDIT : I realized the piece of code actually runs twice without any exception at the end of the program initialization, during my - (void)applicationDidFinishLaunching: routine. After that, any triggering will be faulty. What does this suggest ?
EDIT 2 : Put aside the fact using insertText: appends instead of replacing, I get a very similar exception when trying :
MyApp[1919:303] *** -[NSBigMutableString _getBlockStart:end:contentsEnd:forRange:stopAtLineSeparators:]: Range or index out of bounds
2013-09-23 15:34:03.956 MyApp[1919:303] (
0 CoreFoundation 0x00007fff917eaf56 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff95bb7d5e objc_exception_throw + 43
2 CoreFoundation 0x00007fff917ead8a +[NSException raise:format:arguments:] + 106
3 CoreFoundation 0x00007fff917ead14 +[NSException raise:format:] + 116
4 Foundation 0x00007fff955afbc5 -[NSString _getBlockStart:end:contentsEnd:forRange:stopAtLineSeparators:] + 160
5 Foundation 0x00007fff955afb1e -[NSString getParagraphStart:end:contentsEnd:forRange:] + 40
6 AppKit 0x00007fff8e5c1cd7 _NSFastFillAllLayoutHolesForGlyphRange + 1040
7 AppKit 0x00007fff8eb31bb4 -[NSTextView(NSPrivate) _ensureLayoutCompleteForVisibleRectWithExtensionFactor:minimumExtensionDistance:repetitions:] + 563
8 AppKit 0x00007fff8eb2d13c -[NSTextView(NSPrivate) _ensureLayoutCompleteForVisibleRectWithExtension:] + 45
9 AppKit 0x00007fff8e6b9650 -[NSTextView setNeedsDisplayInRect:avoidAdditionalLayout:] + 2078
10 AppKit 0x00007fff8e6bf1c1 -[NSLayoutManager(NSPrivate) _resizeTextViewForTextContainer:] + 5690
11 AppKit 0x00007fff8e5b0110 -[NSLayoutManager(NSPrivate) _recalculateUsageForTextContainerAtIndex:] + 2678
12 AppKit 0x00007fff8e96b948 _enableTextViewResizing + 209
13 AppKit 0x00007fff8e5a8454 -[NSLayoutManager textStorage:edited:range:changeInLength:invalidatedRange:] + 582
14 AppKit 0x00007fff8e5a81f6 -[NSTextStorage _notifyEdited:range:changeInLength:invalidatedRange:] + 155
15 AppKit 0x00007fff8e681133 -[NSTextStorage processEditing] + 205
16 AppKit 0x00007fff8e681cab -[NSTextStorage endEditing] + 81
17 AppKit 0x00007fff8eb0620f -[NSTextView insertText:replacementRange:] + 2013
18 AppKit 0x00007fff8eb05a25 -[NSTextView insertText:] + 320
19 MyApp 0x00000001000078c1 -[MyAppDelegate updateOverview] + 1569
20 MyApp 0x0000000100008751 -[MyAppDelegate tableViewSelectionDidChange:] + 177
21 Foundation 0x00007fff95550d0e __-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_1 + 47
22 CoreFoundation 0x00007fff917937ba _CFXNotificationPost + 2634
23 Foundation 0x00007fff9553cfc3 -[NSNotificationCenter postNotificationName:object:userInfo:] + 65
24 AppKit 0x00007fff8e674049 -[NSTableView _sendSelectionChangedNotificationForRows:columns:] + 203
25 AppKit 0x00007fff8e64ab0a -[NSTableView _enableSelectionPostingAndPost] + 425
26 AppKit 0x00007fff8e670e58 -[NSTableView mouseDown:] + 5030
27 AppKit 0x00007fff8e5d6c98 -[NSWindow sendEvent:] + 6306
28 AppKit 0x00007fff8e5703a5 -[NSApplication sendEvent:] + 5593
29 AppKit 0x00007fff8e506a0e -[NSApplication run] + 555
30 AppKit 0x00007fff8e782eac NSApplicationMain + 867
31 MyApp 0x0000000100001fc2 main + 34
32 MyApp 0x0000000100001f94 start + 52
)
It turned out I was modifying the stringValue of a NSTextView while it was calling textDidEndEditing:, which resulted in a mismatched string count and a Range or index out of bounds exception thrown when this wrong count was being used inside NSTextView inner methods.
I just bypassed the problem by using an ivar #property BOOL canModifyTextViewString which would be set accordingly inside methods where modifying the string is unsafe/not possible.
NSTextView doesn't have setString as a class method
-(void)updateOverview{
[stickyNoteContainer insertText:#"Notes"];
}
https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTextView_Class/Reference/Reference.html#//apple_ref/occ/instm/NSTextView/insertText:
I notice that in my app's crash log on OS X that one of the first sections is "Application Specific Backtrace". It shows something like this:
Application Specific Backtrace 1:
0 CoreFoundation 0x00007fff8acef716 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff8d723470 objc_exception_throw + 43
2 CoreFoundation 0x00007fff8ad7df07 -[__NSDictionaryM setObject:forKey:] + 135
3 My App 0x00000001030c6f72 My App + 81778
4 My App 0x00000001030c7969 My App + 84329
5 AppKit 0x00007fff8c3d5afa -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1012
6 AppKit 0x00007fff8c5ec1d6 -[NSNib _instantiateNibWithExternalNameTable:] + 610
7 AppKit 0x00007fff8c5ebf43 -[NSNib instantiateNibWithOwner:topLevelObjects:] + 254
8 AppKit 0x00007fff8c5eb4f7 -[NSViewController loadView] + 184
9 AppKit 0x00007fff8c593349 -[NSViewController view] + 41
10 My App 0x00000001030cae69 My App + 97897
11 My App 0x00000001030cbb3a My App + 101178
12 AppKit 0x00007fff8c590322 -[NSTableView _sendDelegateHeightOfRow:] + 130
13 AppKit 0x00007fff8c5900db -[NSTableView _uncachedRectHeightOfRow:] + 197
14 AppKit 0x00007fff8c58ff2c -[_NSTableRowHeightStorage _cacheRowHeights] + 163
15 AppKit 0x00007fff8c54a6f5 -[_NSTableRowHeightStorage _ensureRowHeights] + 80
16 AppKit 0x00007fff8c5680cb -[_NSTableRowHeightStorage computeRowAtPoint:] + 38
17 AppKit 0x00007fff8c567fd9 -[NSTableView rowAtPoint:] + 306
18 AppKit 0x00007fff8c566af7 -[NSTableView rowsInRect:] + 375
19 AppKit 0x00007fff8c597ca4 _NSTVVisibleRowsForUpdate + 673
20 AppKit 0x00007fff8c5971e5 -[NSTableRowData _unsafeUpdateVisibleRowEntries] + 96
21 AppKit 0x00007fff8c597001 -[NSTableRowData updateVisibleRowViews] + 119
22 AppKit 0x00007fff8c56f0fb -[NSTableView viewWillDraw] + 165
23 AppKit 0x00007fff8c44cbed __22-[NSView viewWillDraw]_block_invoke_0 + 307
24 CoreFoundation 0x00007fff8ace80b6 __NSArrayEnumerate + 582
25 AppKit 0x00007fff8c44c92d -[NSView viewWillDraw] + 244
26 AppKit 0x00007fff8c44bf84 -[NSView _sendViewWillDrawInRect:clipRootView:] + 1525
27 AppKit 0x00007fff8c4183f1 -[NSView displayIfNeeded] + 1044
28 AppKit 0x00007fff8c4c429e -[NSClipView _immediateScrollToPoint:] + 7852
29 AppKit 0x00007fff8c4c2342 -[NSClipView scrollToPoint:] + 268
30 AppKit 0x00007fff8c58acdd -[NSScrollView scrollClipView:toPoint:] + 426
31 AppKit 0x00007fff8c4c20cc -[NSClipView _scrollTo:animateScroll:flashScrollerKnobs:] + 1626
32 AppKit 0x00007fff8c39d579 -[NSClipView _scrollTo:animate:] + 28
33 AppKit 0x00007fff8caab2a1 __31-[NSScrollView _snapRubberBand]_block_invoke_0610 + 1989
34 AppKit 0x00007fff8ca2412a ____NSPeriodicInvokerScheduled_block_invoke_0 + 57
35 libdispatch.dylib 0x00007fff8a013f3d _dispatch_call_block_and_release + 15
36 libdispatch.dylib 0x00007fff8a0100fa _dispatch_client_callout + 8
37 libdispatch.dylib 0x00007fff8a0149ab _dispatch_after_timer_callback + 22
38 libdispatch.dylib 0x00007fff8a0100fa _dispatch_client_callout + 8
39 libdispatch.dylib 0x00007fff8a0122d7 _dispatch_source_invoke + 691
40 libdispatch.dylib 0x00007fff8a011349 _dispatch_queue_invoke + 72
41 libdispatch.dylib 0x00007fff8a0150cd _dispatch_main_queue_callback_4CF + 220
42 CoreFoundation 0x00007fff8ac9181e __CFRunLoopRun + 1614
43 CoreFoundation 0x00007fff8ac90dd2 CFRunLoopRunSpecific + 290
44 HIToolbox 0x00007fff85323774 RunCurrentEventLoopInMode + 209
45 HIToolbox 0x00007fff85323512 ReceiveNextEventCommon + 356
46 HIToolbox 0x00007fff853233a3 BlockUntilNextEventMatchingListInMode + 62
47 AppKit 0x00007fff8c414fa3 _DPSNextEvent + 685
48 AppKit 0x00007fff8c414862 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
49 AppKit 0x00007fff8c40bc03 -[NSApplication run] + 517
50 AppKit 0x00007fff8c3b0656 NSApplicationMain + 869
51 My App 0x00000001030b4554 My App + 5460
52 ??? 0x0000000000000002 0x0 + 2
I know that's code that was running on the main thread, but yet it's shown in that section and NOT in the Thread 0 backtrace, which looks something like this:
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x00007fff8588d212 __pthread_kill + 10
1 libsystem_c.dylib 0x00007fff8e1fab34 pthread_kill + 90
2 libsystem_c.dylib 0x00007fff8e23edfa abort + 143
3 libc++abi.dylib 0x00007fff888abf87 abort_message + 257
4 libc++abi.dylib 0x00007fff888a9936 default_terminate() + 28
5 libobjc.A.dylib 0x00007fff8d7238f3 _objc_terminate() + 91
6 libc++.1.dylib 0x00007fff8694c8fe std::terminate() + 20
7 libobjc.A.dylib 0x00007fff8d72365e objc_terminate + 9
8 libdispatch.dylib 0x00007fff8a01010e _dispatch_client_callout + 28
9 libdispatch.dylib 0x00007fff8a0149ab _dispatch_after_timer_callback + 22
10 libdispatch.dylib 0x00007fff8a0100fa _dispatch_client_callout + 8
11 libdispatch.dylib 0x00007fff8a0122d7 _dispatch_source_invoke + 691
12 libdispatch.dylib 0x00007fff8a011349 _dispatch_queue_invoke + 72
13 libdispatch.dylib 0x00007fff8a0150cd _dispatch_main_queue_callback_4CF + 220
14 com.apple.CoreFoundation 0x00007fff8ac9181e __CFRunLoopRun + 1614
15 com.apple.CoreFoundation 0x00007fff8ac90dd2 CFRunLoopRunSpecific + 290
16 com.apple.HIToolbox 0x00007fff85323774 RunCurrentEventLoopInMode + 209
17 com.apple.HIToolbox 0x00007fff85323512 ReceiveNextEventCommon + 356
18 com.apple.HIToolbox 0x00007fff853233a3 BlockUntilNextEventMatchingListInMode + 62
19 com.apple.AppKit 0x00007fff8c414fa3 _DPSNextEvent + 685
20 com.apple.AppKit 0x00007fff8c414862 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
21 com.apple.AppKit 0x00007fff8c40bc03 -[NSApplication run] + 517
22 com.apple.AppKit 0x00007fff8c3b0656 NSApplicationMain + 869
23 com.mycompany.myapp 0x00000001030b4554 0x1030b3000 + 5460
What's the significance of "Application Specific Backtrace" and why isn't that code included in the main thread backtrace?
(To be clear, I'm not asking how to debug this code, I'm just looking for an explanation on the structure and meaning of the crash log itself. Thanks!)
This is how exception handling works. You have an exception on the main thread, where the NSException is created (it holds all info about exception including current stack trace). After throwing an exception object control is passed to the closest handler in the call stack, unwinding the stack between throw and catch point. If an exception is not caught, it is intercepted by a function called the uncaught exception handler. The uncaught exception handler always causes the program to exit but may perform some task before this happens.
The default uncaught exception handler logs a message to the console before it exits the program.
So in your case Application Specific Backtrace is the stacktrace when exception was thrown and Thread 0 Crashed:: Dispatch queue: com.apple.main-thread is the stack trace when the app was killed.
Notice that up to this point the stack trace is identical:
10 libdispatch.dylib 0x00007fff8a0100fa _dispatch_client_callout + 8
11 libdispatch.dylib 0x00007fff8a0122d7 _dispatch_source_invoke + 691
12 libdispatch.dylib 0x00007fff8a011349 _dispatch_queue_invoke + 72
13 libdispatch.dylib 0x00007fff8a0150cd _dispatch_main_queue_callback_4CF + 220
14 com.apple.CoreFoundation 0x00007fff8ac9181e __CFRunLoopRun + 1614
15 com.apple.CoreFoundation 0x00007fff8ac90dd2 CFRunLoopRunSpecific + 290
16 com.apple.HIToolbox 0x00007fff85323774 RunCurrentEventLoopInMode + 209
17 com.apple.HIToolbox 0x00007fff85323512 ReceiveNextEventCommon + 356
18 com.apple.HIToolbox 0x00007fff853233a3 BlockUntilNextEventMatchingListInMode + 62
19 com.apple.AppKit 0x00007fff8c414fa3 _DPSNextEvent + 685
20 com.apple.AppKit 0x00007fff8c414862 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
21 com.apple.AppKit 0x00007fff8c40bc03 -[NSApplication run] + 517
22 com.apple.AppKit 0x00007fff8c3b0656 NSApplicationMain + 869
I'm trying to change the current selection of a NSTableView with the following code:
[self.modesTable selectRowIndexes:indexSet byExtendingSelection:NO];
and I'm getting the following error:
-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object
I'm not using any dictionary at all. Anybody knows where this might come from?
Here's the stack trace:
2012-04-03 18:14:00.598 TurnMode[7130:403] An uncaught exception was raised
2012-04-03 18:14:00.599 TurnMode[7130:403] -[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object
2012-04-03 18:14:00.603 TurnMode[7130:403] (
0 CoreFoundation 0x00007fff8ac44fc6 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff8644cd5e objc_exception_throw + 43
2 CoreFoundation 0x00007fff8ac44dfa +[NSException raise:format:arguments:] + 106
3 CoreFoundation 0x00007fff8ac44d84 +[NSException raise:format:] + 116
4 CoreFoundation 0x00007fff8ac01ec0 -[__NSCFDictionary setObject:forKey:] + 96
5 TurnMode 0x0000000100009722 -[FRRMode saveObject:named:] + 210
6 TurnMode 0x0000000100008f20 -[FRRMode saveToUserDefaults] + 192
7 TurnMode 0x000000010000701d -[FRRPreferencesController tableViewSelectionDidChange:] + 125
8 Foundation 0x00007fff877b7d32 __-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_1 + 47
9 CoreFoundation 0x00007fff8abedaaa _CFXNotificationPost + 2634
10 Foundation 0x00007fff877a3fe7 -[NSNotificationCenter postNotificationName:object:userInfo:] + 65
11 AppKit 0x00007fff8bcd51d9 -[NSTableView _sendSelectionChangedNotificationForRows:columns:] + 203
12 AppKit 0x00007fff8bcabbfe -[NSTableView _enableSelectionPostingAndPost] + 425
13 AppKit 0x00007fff8bcd4045 -[NSTableView _doSelectIndexes:byExtendingSelection:indexType:funnelThroughSingleIndexVersion:] + 2915
14 TurnMode 0x0000000100006662 -[FRRPreferencesController syncViewWithTempModel] + 914
15 TurnMode 0x0000000100006c76 -[FRRPreferencesController showPreferencesView:] + 438
16 CoreFoundation 0x00007fff8ac3475d -[NSObject performSelector:withObject:] + 61
17 AppKit 0x00007fff8bc6ecb2 -[NSApplication sendAction:to:from:] + 139
18 AppKit 0x00007fff8bd5bfe7 -[NSMenuItem _corePerformAction] + 399
19 AppKit 0x00007fff8bd5bd1e -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:] + 125
20 AppKit 0x00007fff8bff9dd4 -[NSMenu _internalPerformActionForItemAtIndex:] + 38
21 AppKit 0x00007fff8be8a3a9 -[NSCarbonMenuImpl _carbonCommandProcessEvent:handlerCallRef:] + 138
22 AppKit 0x00007fff8bcd5b4b NSSLMMenuEventHandler + 339
23 HIToolbox 0x00007fff8d6f4294 _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec + 1263
24 HIToolbox 0x00007fff8d6f38a0 _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec + 446
25 HIToolbox 0x00007fff8d70a677 SendEventToEventTarget + 76
26 HIToolbox 0x00007fff8d7506c1 _ZL18SendHICommandEventjPK9HICommandjjhPKvP20OpaqueEventTargetRefS5_PP14OpaqueEventRef + 398
27 HIToolbox 0x00007fff8d837c59 SendMenuCommandWithContextAndModifiers + 56
28 HIToolbox 0x00007fff8d87e73d SendMenuItemSelectedEvent + 253
29 HIToolbox 0x00007fff8d7497bb _ZL19FinishMenuSelectionP13SelectionDataP10MenuResultS2_ + 101
30 HIToolbox 0x00007fff8d877175 _ZL19PopUpMenuSelectCoreP8MenuData5PointdS1_tjPK4RecttjS4_S4_PK10__CFStringPP13OpaqueMenuRefPt + 1660
31 HIToolbox 0x00007fff8d877434 _HandlePopUpMenuSelection7 + 621
32 AppKit 0x00007fff8be8d075 _NSSLMPopUpCarbonMenu3 + 3860
33 AppKit 0x00007fff8c2386b6 _NSPopUpCarbonMenu3 + 39
34 AppKit 0x00007fff8be8b1da -[NSCarbonMenuImpl popUpMenu:atLocation:width:forView:withSelectedItem:withFont:withFlags:withOptions:] + 322
35 AppKit 0x00007fff8c0eb8da +[NSStatusBarButtonCell popupStatusBarMenu:inRect:ofView:withEvent:] + 673
36 AppKit 0x00007fff8c0ebb85 -[NSStatusBarButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 147
37 AppKit 0x00007fff8bc6cbde -[NSControl mouseDown:] + 786
38 AppKit 0x00007fff8bc376e0 -[NSWindow sendEvent:] + 6306
39 AppKit 0x00007fff8c0ec598 -[NSStatusBarWindow sendEvent:] + 66
40 AppKit 0x00007fff8bbd016d -[NSApplication sendEvent:] + 5593
41 AppKit 0x00007fff8bb661f2 -[NSApplication run] + 555
42 AppKit 0x00007fff8bde4b88 NSApplicationMain + 867
43 TurnMode 0x0000000100001ab2 main + 34
44 TurnMode 0x0000000100001a84 start + 52
)
The exception is definitely caused by calling -[NSDictionary setObject:forKey:] in -[FRRMode saveObject:named:].
If you are indeed not using any dictionaries in this method, you should still look for setObject:forKey:. If you over-release an object, its memory address may be occupied by an NSDictionary which obviously does not respond to the selector.
It appears that -[FRRPreferencesController syncViewWithTempModel] is your method which is calling [self.modesTable selectRowIndexes:indexSet byExtendingSelection:NO]. Then, the table view dutifully changes its selection.
It also appears that your FRRPreferencesController object is an observer of the notification posted by the table view when its selection changes. That, in turn, calls -[FRRMode saveToUserDefaults] which calls -[FRRMode saveObject:named:] and that is trying to mutate an immutable dictionary.
From the name saveToUserDefaults, I wonder if you're grabbing a dictionary-typed value from NSUserDefaults and then trying to mutate it. NSUserDefaults does not hold or return mutable collections, even if you pass a mutable collection into its -setObject:forKey:. When you later retrieve it, you get an immutable copy.
I have a WebView in a NSWindow and when I close the window and open it again the app crashes ;(
The window is called by a menu item button.
Here is the output:
2011-10-22 15:55:32.440 Textis[17176:903] -[__NSCFType mainFrame]: unrecognized selector sent to instance 0x100514e90
2011-10-22 15:55:32.544 Textis[17176:903] HIToolbox: ignoring exception '-[__NSCFType mainFrame]: unrecognized selector sent to instance 0x100514e90' that raised inside Carbon event dispatch
(
0 CoreFoundation 0x00007fff838b17b4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x00007fff8127af03 objc_exception_throw + 45
2 CoreFoundation 0x00007fff8390b110 +[NSObject(NSObject) doesNotRecognizeSelector:] + 0
3 CoreFoundation 0x00007fff8388391f ___forwarding___ + 751
4 CoreFoundation 0x00007fff8387fa68 _CF_forwarding_prep_0 + 232
5 Textis 0x0000000100003722 -[Share tweet:] + 210
6 AppKit 0x00007fff84b3eeda -[NSApplication sendAction:to:from:] + 95
7 AppKit 0x00007fff84b6346a -[NSMenuItem _corePerformAction] + 365
8 AppKit 0x00007fff84b631d4 -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:] + 121
9 AppKit 0x00007fff84de8cf4 -[NSMenu _internalPerformActionForItemAtIndex:] + 35
10 AppKit 0x00007fff84c9a9e9 -[NSCarbonMenuImpl _carbonCommandProcessEvent:handlerCallRef:] + 136
11 AppKit 0x00007fff84b4599c NSSLMMenuEventHandler + 321
12 HIToolbox 0x00007fff8665d7f7 _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec + 1002
13 HIToolbox 0x00007fff8665cd46 _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec + 395
14 HIToolbox 0x00007fff8667aa81 SendEventToEventTarget + 45
15 HIToolbox 0x00007fff866a9c35 _ZL18SendHICommandEventjPK9HICommandjjhPKvP20OpaqueEventTargetRefS5_PP14OpaqueEventRef + 387
16 HIToolbox 0x00007fff866d6a0a SendMenuCommandWithContextAndModifiers + 56
17 HIToolbox 0x00007fff866d69c2 SendMenuItemSelectedEvent + 101
18 HIToolbox 0x00007fff866d68d2 _ZL19FinishMenuSelectionP13SelectionDataP10MenuResultS2_ + 150
19 HIToolbox 0x00007fff867dfa69 _ZL19PopUpMenuSelectCoreP8MenuData5PointdS1_tjPK4RecttjS4_S4_PK10__CFStringPP13OpaqueMenuRefPt + 1618
20 HIToolbox 0x00007fff867dfdc2 _HandlePopUpMenuSelection7 + 665
21 AppKit 0x00007fff84c9799b _NSSLMPopUpCarbonMenu3 + 3720
22 AppKit 0x00007fff84ec76f9 -[NSStatusBarButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 162
23 AppKit 0x00007fff84bc92f5 -[NSControl mouseDown:] + 624
24 AppKit 0x00007fff84ae33a7 -[NSWindow sendEvent:] + 5409
25 AppKit 0x00007fff84ec8498 -[NSStatusBarWindow sendEvent:] + 68
26 AppKit 0x00007fff84a18afa -[NSApplication sendEvent:] + 4719
27 AppKit 0x00007fff849af6de -[NSApplication run] + 474
28 AppKit 0x00007fff849a83b0 NSApplicationMain + 364
29 Textis 0x00000001000010c2 main + 34
30 Textis 0x0000000100001094 start + 52
31 ??? 0x0000000000000001 0x0 + 1
)
mainFrame is a method on WebView
so
2011-10-22 15:55:32.544 Textis[17176:903] HIToolbox: ignoring exception '-[__NSCFType mainFrame]: unrecognized selector sent to instance 0x100514e90' that raised inside Carbon event dispatch
points to your WebView being released either by you explicitly or implicitly by the OS when the window is shut. You are hitting a dead pointer.
Not sure how you are setting up your window but you are probably assuming that the original WebView is still a valid object at a reopen.
Have a look in that direction.