Search code examples
iphoneobjective-crelease-management

message sent to deallocated instance ! cant find error


alright I am looking for this error since 2 hours and I just cant figure it out please help me. I have the following situation I have 2 viewcontroller. one presents the other one as modalview like that.

SearchViewController *searchViewController = [[SearchViewController alloc]init];
[searchViewController setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
searchViewController.delegate = self;
searchViewController.senderTag = [sender tag];
[self presentModalViewController:searchViewController animated:YES];
[searchViewController release];

in my searchviewcontroller I do this in the .h file

BSKmlResult *selectedAirport;
@property (nonatomic, retain) BSKmlResult *selectedAirport;

in the .m file i synthesize it and then set it like that

selectedAirport = [self.airportList objectAtIndex:indexPath.row];

and then release it here

- (void)dealloc {
  [selectedAirport release];
  [super dealloc];
}

in the delegate methode of my SearchViewController which is implemented in the first viewcontroller where I also present the SearchViewController i have the following

if (controller.selectedAirport) {
            if (departureAirport) {
                [departureAirport release];
            }

        departureAirport = [controller.selectedAirport copy];
}

[self dismissModalViewControllerAnimated:YES];

I narrowed down where the error happens it is in the dealloc of my SearchViewController [selectedAirport release];

but I cant figure out where my mistake is please help


Solution

  • selectedAirport = [self.airportList objectAtIndex:indexPath.row];
    

    You arent retaining selectedAirport here.

    Change it to

    self.selectedAirport = [self.airportList objectAtIndex:indexPath.row];
    

    Since you couldnt find it out, probably you dont know this...

    If you dont access member variables by self.memberVariable, you are not accessing its property. Thus, it was not getting retained.

    Ofcourse you can also retain it by saying

    selectedAirport = [[self.airportList objectAtIndex:indexPath.row] retain];
    

    But whats the use of your property then...