我有一个基于导航的iPhone应用程序。
当您在表格 View 中的一个单元格上按下时,一个新的UIViewController将被推到导航堆栈中。在此 View Controller 中,我在viewDidLoad方法中设置了一个自定义titleView:

- (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,该标题已与第二个 View Controller 释放。在我的代码中注释掉自定义titleView部分后,该应用便可以工作。
我试图在释放第二个ViewController之前将navigationItem.titleView设置为nil(在Apple文档中找到),但这无济于事。

您是否暗示我可以采取什么措施来防止此崩溃?

谢谢,
标记。

最佳答案

我大约一个月前遇到了完全相同的错误,情况完全相同。它使我发疯。

我发现我弹出的viewController根本没有被释放。我在该 View 中添加了一个自定义UIButton子类,但是当按下第二个 View 时,该子类已被释放。因此,当弹出时,UIButton不存在。

检查您弹出的 View ,以确保没有任何正在取消分配的类或在不知情的情况下被自动释放。

希望这可以帮助。

关于iphone - UIViewController自定义titleView使应用崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3404695/

10-11 17:44