Question

I have a navigation based iPhone app. When you press on a cell in the tableview a new UIViewController is pushed to the navigation stack. In this view controller I am setting a custom titleView in the viewDidLoad method:

- (void)viewDidLoad {
    [super viewDidLoad];

    // Setup custom navigation title
    [self setTitle:@"Mediaportal"];
    navItem = [[NavigationBarTitleItemViewController alloc] initWithNibName:@"NavigationBarTitleItem" bundle:nil];
    [navItem setTitle:[theServer name]];
    [navItem setSubTitle:@""];
    [self.navigationItem setTitleView:navItem.view];

…
}

Once I switch back to the RootViewController:

[self.navigationController popToRootViewControllerAnimated:YES];

the app crashes with the following error (NSZombieEnabled=YES):

*** -[CALayer retain]: message sent to deallocated instance 0x5a5fd80

From what I can see the RootViewController still tries to access the custom titleView, which was deallocated with the second view controller. Once I comment out the custom titleView part in my code the app works. I tried to set the navigationItem.titleView to nil (as found in the apple docs) before the second ViewController is deallocated, but that doesn't help.

Do you have a hint what I can do to prevent this crash?

Thanks, Mark.

Was it helpful?

Solution 2

I finally found the solution for it (a quite simple one). I have to alloc and init the navItem through its property then it is being retained:

self.navItem = [[NavigationBarTitleItemViewController alloc] initWithNibName:@"NavigationBarTitleItem" bundle:nil];

OTHER TIPS

I had this exact same error a month or so ago, exactly the same situation. It drove me NUTS.

I discovered that the viewController i was popping too hadn't been deallocated at all. I had a custom UIButton subclass added to that view however that had been deallocated when the second view had been pushed. So when popping back, the UIButton wasn't there.

Check the view you are popping back to, to ensure you've not got any classes that you are deallocating, or are being autoreleased without you knowing.

Hope this helps.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top