Question

J'ai une application iPhone à base de navigation. Lorsque vous appuyez sur une cellule dans la tableview un nouveau UIViewController est poussé à la pile de navigation. Dans ce contrôleur de vue, je suis en train d'un titleview personnalisé dans la méthode viewDidLoad:

- (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];

…
}

Une fois que je revenir à la RootViewController:

[self.navigationController popToRootViewControllerAnimated:YES];

les plantages de l'application avec l'erreur suivante (NSZombieEnabled = YES):

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

D'après ce que je peux voir le RootViewController essaie toujours d'accéder au titleview personnalisé, qui a été désallouée avec le deuxième contrôleur de vue. Une fois que je commente la partie titleview personnalisée dans mon code l'application fonctionne. J'ai essayé de régler le navigationItem.titleView à zéro (que l'on trouve dans la documentation de la pomme) avant la deuxième ViewController est désallouée, mais cela ne suffit pas.

Avez-vous un indice ce que je peux faire pour empêcher cet accident?

Merci, Mark.

Était-ce utile?

La solution 2

J'ai finalement trouvé la solution pour elle (un moment assez simple). Je dois alloc et init la navItem par sa propriété alors il est retenu:

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

Autres conseils

J'ai eu cette même erreur il y a exactement un mois, exactement la même situation. Il m'a conduit NUTS.

J'ai découvert que le viewController i sautait trop avait pas été désallouée du tout. J'ai eu une sous-classe UIButton personnalisé ajouté à ce point de vue mais qui avait été désallouée lorsque le second point de vue avait été poussé. Alors, quand popping retour, le UIButton était pas là.

Vérifiez la vue que vous popping revenir, pour vous assurer n'avez pas obtenu toutes les classes que vous désaffecter ou sont en cours autoreleased sans que vous le sachiez.

Hope this helps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top