2010-08-04 4 views
0

У меня есть приложение для навигации на основе iPhone. Когда вы нажимаете на ячейку в представлении таблицы, новый UIViewController переносится в стек навигации. С этой точки зрения контроллера я установка пользовательских titleView в методе viewDidLoad:UIViewController custom titleView crashes app

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

… 
} 

После того, как переключиться обратно в RootViewController:

[self.navigationController popToRootViewControllerAnimated:YES]; 

сбои приложения со следующей ошибкой (NSZombieEnabled = ДА):

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

Из того, что я могу видеть RootViewController все еще пытается получить доступ к пользовательской titleView, который был освобождаться со вторым контроллером просмотра. Как только я прокомментирую пользовательскую часть titleView в своем коде, приложение работает. Я попытался установить для параметра navigationItem.titleView значение nil (как показано в документах apple), прежде чем второй ViewController будет освобожден, но это не поможет.

У вас есть намек на то, что я могу сделать, чтобы предотвратить этот крах?

Thanks, Mark.

+0

Где именно вы отпуская navItem? – Kalle

+0

В методе dealloc второго контроллера представления. – Cornelius

ответ

0

Наконец-то я нашел решение для него (довольно простой). я должен Alloc и инициализировать navItem через его собственность, то она удерживаться:

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

У меня была такая же ошибка месяц назад, точно такая же ситуация. Это заставило меня NUTS.

Я обнаружил, что viewController, который я тоже всплывал, не был вообще освобожден. У меня был пользовательский подкласс UIButton, добавленный к этому представлению, однако это было отменено, когда второе представление было нажато. Поэтому, когда он вернулся, UIButton не было.

Проверьте, что вы возвращаетесь назад, чтобы убедиться, что у вас нет классов, которые вы освобождаете, или их автореализовывают без вашего ведома.

Надеюсь, это поможет.

+0

Привет, Bongeh, спасибо за ваш ответ, но я думаю, что у меня другая проблема. Аварийный сбой не возникает, когда я не добавляю пользовательский заголовок к элементу navigationItem в моем контроле subview. Поэтому я уверен, что проблема в том, что проблема не в некотором деле освобожденном объекте в контроллере корневого представления? Или я чего-то не хватает? – Cornelius

+0

Не видя больше своего кода или упрощенного проекта, который реплицирует проблему, я могу только выбросить гадости в заданную проблему. Очевидно, мы знаем, что что-то освобождается, что не должно быть так. Существуют ли какие-либо классы или объекты в NavigationBarTitleItemViewController, которые выпускаются или являются объектами autorelease? – Bongeh