UIViewController пользовательский titleView вылетает приложение - PullRequest
0 голосов
/ 04 августа 2010

У меня есть приложение для iPhone, основанное на навигации. Когда вы нажимаете на ячейку в табличном представлении, новый UIViewController помещается в стек навигации. В этом контроллере представления я устанавливаю пользовательский titleView в методе 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];

…
}

Как только я переключаюсь обратно на RootViewController:

[self.navigationController popToRootViewControllerAnimated:YES];

приложение вылетает со следующей ошибкой (NSZombieEnabled = YES):

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

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

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

Спасибо, Марк.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2010

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

self.navItem = [[NavigationBarTitleItemViewController alloc] initWithNibName:@"NavigationBarTitleItem" bundle:nil];
0 голосов
/ 04 августа 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...