release after pushing view onto navigation stack gives me exc_bad_access error

0

The following code is in the tableView didSelectRowAtIndexPath if the release is uncommented i get the error:

ComicDetailsViewController * comicDetailsViewController = [[ComicDetailsViewController alloc] initWithNibName:@"ComicDetailsViewController" bundle:nil];
       comicDetailsViewController.comic = (Comic *)[arrayOfComics objectAtIndex:indexPath.row];
       comicDetailsViewController.bLoadPerformances = YES;
       [self.navigationController pushViewController:comicDetailsViewController animated:YES];
       //[comicDetailsViewController release];

The error does not happen right away, it happens once i click the back button in the omicDetailsViewController.

ie.) i select the tableview row, the next view loads and works properly. Once i am done with that view and click the back navigation button the program crashes and gives me exc_bad_access. Why is this?

EDIT:

#0  0x9682b176 in __kill
#1  0x9682b168 in kill$UNIX2003
#2  0x968bd89d in raise
#3  0x968d39bc in abort
#4  0x968c2164 in szone_error
#5  0x968c21e7 in free_small_botch
#6  0x000a7877 in -[NSConcreteMutableData dealloc]
#7  0x00006433 in -[ComicDetailsViewController dealloc] at ComicDetailsViewController.m:376
#8  0x003cbcc7 in -[UINavigationController setDisappearingViewController:]
#9  0x003c9219 in -[UINavigationController _clearLastOperation]
#10 0x003c9b62 in -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:]
#11 0x0055224a in -[UINavigationTransitionView _notifyDelegateTransitionDidStopWithContext:]
#12 0x0055338a in -[UINavigationTransitionView _navigationTransitionDidStop]
#13 0x0034829d in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:]
#14 0x0034812f in -[UIViewAnimationState animationDidStop:finished:]
#15 0x0244ca28 in run_animation_callbacks
#16 0x0244c8e9 in CA::timer_callback
#17 0x02688d43 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__
#18 0x0268a384 in __CFRunLoopDoTimer
#19 0x025e6d09 in __CFRunLoopRun
#20 0x025e6280 in CFRunLoopRunSpecific
#21 0x025e61a1 in CFRunLoopRunInMode
#22 0x02f0c2c8 in GSEventRunModal
#23 0x02f0c38d in GSEventRun
#24 0x00326b58 in UIApplicationMain
#25 0x000020f4 in main at main.m:14

Edit 2:

Here is the comicDetailsViewController dealloc block:

- (void)dealloc {
[comic release];
[xmlParser release];
[webData release];
[currentPerformanceObject release];
[arrayOfPerformances release];
[soapResults release];
[btnPerformances release];
[super dealloc];

}

Line 376 is the webData release line

EDIT 3:

    -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"ERROR with theConenction");
    [connection release];
    [webData release];
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"DONE. Received Bytes: %d", [webData length]);

    if(xmlParser)
    {
        [xmlParser release];
    }

    xmlParser = [[NSXMLParser alloc] initWithData: webData];
    [xmlParser setDelegate: self];
    [xmlParser setShouldResolveExternalEntities: YES];
    [xmlParser parse];

    [connection release];
    [webData release];
}
iphone
objective-c
uinavigationcontroller
pushviewcontroller
asked on Stack Overflow Nov 26, 2010 by Mausimo • edited Nov 26, 2010 by Mausimo

3 Answers

1

Please show us the stack trace.

But my initial guess is you are doing something wrong in - (void) dealloc of your ComicDetailsViewController class.

Please check for few things

  • Your dealloc block is alright
  • You are not releasing comicDetailsViewController object or a reference to it from somewhere else.

Hope this helps.

Thanks, Madhup

answered on Stack Overflow Nov 26, 2010 by Madhup Singh Yadav
0

Before popping the view out, cancel your NSURLConnection by sending a cancel message to the appropriate object.

Assuming your NSURLConnection object is named asyncConnection:

-(void)viewWillDisappear:(BOOL)animated
   [asyncConnection cancel];
}
answered on Stack Overflow Nov 26, 2010 by Rog
0

The problem is still possibly in your dealloc.

Just because the object is in your @interface (.h file), that does not mean that you can/have to dealloc the variable. I had this problem as well

.h file

@interface PeopleViewController : UITableViewController {
NSArray *people;
}

@property (nonatomic, retain) NSArray *people;

@end

.m file

@implementation PeopleViewController

@synthesize people;

- (void)viewDidLoad {
    people = [town.people allObjects];
}

...

- (void)dealloc {
    [people release];
}

@end

I didn't need to release people because I didn't increase the retain count on the object while in was in my custom view, therefore releasing it during the dealloc process caused my problems.

answered on Stack Overflow Nov 29, 2010 by Benjamin

User contributions licensed under CC BY-SA 3.0