Exception not being caught in try statement

Mark Allan

Hi folks,

Some users are reporting a crash that I can't reproduce, and in an attempt to gain additional diagnostics from a user, I wrapped the affected line in a try/catch block. For two users it resolve the crash, but for a third, it's still crashing at the same point!

The crash occurs when a user attempts to open the "About" window from my app's main menu item. I'm not using the standard about panel as there's a few additional items I need to display, one of which is an NSTextView which I populate with the contents of an RTF file from within the app bundle.

I've symbolicated the crash log to find it's happening when populating that TextView. The line in question now reads as follows:

@try {
[self.aboutBox.creditsTextView readRTFDFromFile:[[NSBundle mainBundle] pathForResource:@"Credits" ofType:@"rtf"]];
} @catch (NSException *exception) {
NSLog(@"Error loading the contents of the text file for the About Box. %@", exception);
//Check we have a file at the expected path
if([[NSFileManager defaultManager] fileExistsAtPath:[[NSBundle mainBundle] pathForResource:@"Credits" ofType:@"rtf"]]){
NSLog(@"Yes. Found the RTF credits file");
// check the attributes in case somehow there's no permission to read the file
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[[NSBundle mainBundle] pathForResource:@"Credits" ofType:@"rtf"] error:nil];
NSLog(@"RTF file has following attributes %@", fileAttributes);
else {
NSLog(@"Nope, file not found");

This is the crash log from the newest build (with the try/catch around that line):

Performing @selector(showAboutBox:) from sender NSMenuItem 0x600000634540
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
terminating with uncaught exception of type NSException
abort() called

Application Specific Backtrace 1:
0 CoreFoundation 0x00007fff206ea6af __exceptionPreprocess + 242
1 libobjc.A.dylib 0x00007fff204223c9 objc_exception_throw + 48
2 CoreFoundation 0x00007fff2079ea9a -[__NSCFString characterAtIndex:].cold.1 + 0
3 CoreFoundation 0x00007fff2079c953 -[__NSArrayM insertObject:atIndex:].cold.2 + 0
4 CoreFoundation 0x00007fff20610421 -[__NSArrayM insertObject:atIndex:] + 1135
5 UIFoundation 0x00007fff23c223ab __defaultTabStops_block_invoke + 161
6 libdispatch.dylib 0x00007fff203cd7c7 _dispatch_client_callout + 8
7 libdispatch.dylib 0x00007fff203ce96b _dispatch_once_callout + 20
8 UIFoundation 0x00007fff23c229d7 -[NSMutableParagraphStyle setTabStops:] + 199
9 UIFoundation 0x00007fff23c3c697 -[NSRTFReader defaultParagraphStyle] + 75
10 UIFoundation 0x00007fff23c3c5be -[NSRTFReader _mutableParagraphStyle] + 112
11 UIFoundation 0x00007fff23c36113 controlClass + 1757
12 UIFoundation 0x00007fff23c356b4 -[NSRTFReader attributedString] + 76
13 UIFoundation 0x00007fff23c311a6 _NSReadAttributedStringFromURLOrData + 3213
14 UIFoundation 0x00007fff23d46985 -[NSAttributedString(NSAttributedStringUIFoundationAdditions) initWithURL:options:documentAttributes:error:] + 228
15 AppKit 0x00007fff23677d9a -[NSTextView readRTFDFromFile:] + 126
16 MyAppHere 0x0000000105fa18a7 MyAppHere+ 227495
17 AppKit 0x00007fff230af7fd -[NSApplication(NSResponder) sendAction:to:from:] + 283
18 AppKit 0x00007fff231b2611 -[NSMenuItem _corePerformAction] + 413

Any ideas what's going on? Other than the file not being found, why else might the object at line 3 in the backtrace be nil...and more interestingly, why is the exception not being caught?


Join {cocoa@apple-dev.groups.io to automatically receive all group messages.