Search code examples
iphoneobjective-cuinavigationcontrollernsmutablearrayiphone-developer-program

Why sometimes my application stops working and gives Program received signal: “SIGABRT” error?


I have four views in my navigational based application. MainView, AddView, ShowView and DetailView. MainView has a NSMutableArray. When i click on button add, then i go to AddView and then i add an object in NSMutable array of MainView. Then i come back and go to ShowView which is a tableView. From MainView i am calling createList function of ShowView like this:

 ShowView *show = [[ShowView alloc] init];
    [show createList: self.savedObjectsList];
    [self.navigationController pushViewController: show animated: YES];

    [runListController release]; 

In ShowView createList looks like this:

 - (void) createRunsList: (NSMutableArray *) list{
     objList = [list retain];

 }

where objList is NSMutableArray in ShowView. every cell of table view creates a DetailView of an object of NSMutbaleArray. Problem is sometimes my applications stop working and i get this error:

 2011-10-03 15:35:55.076 RunnoIPhoneApp[2750:707] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSMutableArray objectAtIndex:]: index 0 beyond bounds for empty array'
 *** Call stack at first throw:
 (
0   CoreFoundation                      0x3399964f __exceptionPreprocess + 114
1   libobjc.A.dylib                     0x30b16c5d objc_exception_throw + 24
2   CoreFoundation                      0x33904069 -[__NSArrayM objectAtIndex:] + 184
3   RunnoIPhoneApp                      0x0000b79f -[PostRunDetailViewController createRunDetail:] + 90
4   RunnoIPhoneApp                      0x0000fd2f -[RunListViewController tableView:didSelectRowAtIndexPath:] + 182
5   UIKit                               0x3203f51b -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 662
6   UIKit                               0x320a30eb -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 130
7   Foundation                          0x32ba26d5 __NSFireDelayedPerform + 368
8   CoreFoundation                      0x33970a47 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 14
9   CoreFoundation                      0x33972ecb __CFRunLoopDoTimer + 850
10  CoreFoundation                      0x33973845 __CFRunLoopRun + 1088
11  CoreFoundation                      0x33903ec3 CFRunLoopRunSpecific + 230
12  CoreFoundation                      0x33903dcb CFRunLoopRunInMode + 58
13  GraphicsServices                    0x3162e41f GSEventRunModal + 114
14  GraphicsServices                    0x3162e4cb GSEventRun + 62
15  UIKit                               0x32019d69 -[UIApplication _run] + 404
16  UIKit                               0x32017807 UIApplicationMain + 670
17  RunnoIPhoneApp                      0x00002553 main + 70
18  RunnoIPhoneApp                      0x00002508 start + 40
 )
 terminate called after throwing an instance of 'NSException'
 Program received signal:  “SIGABRT”.
 warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3.5 (8L1)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib (file not found).
 Program received signal:  “SIGABRT”.
 (gdb) 

Can anybody tell me why is it happening? DetailView of some first objects works fine but then i get this error. Thanks in advance.


Solution

  • Looking at the stack trace, the exception is thrown in your [PostRunDetailViewController createRunDetail:] method, which is called when you select a row in your RunListViewController's UITableView. You are trying to access an element in the array that is out of bounds.

    Put a break point at the start of this method and step through it in the debugger. Work out which array access is causing the exception and then think why the array might not contain the elements that you expect.