虽然我已经解决了这个问题。我真的需要有人向我解释它为什么有效。
我UINavBar
有一个自定义UIView
为可见的 ViewController。我创建了一个自定义按钮来代替导航栏的标题视图并将其设置为autorelease
(我正在自定义现有的非 ARC代码):
- (void)loadView {
..
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self
action:@selector(presentEmailThreadList)
forControlEvents:UIControlEventTouchDown];
[button setTitle:[NSString stringWithFormat:@"1 of %d",self.numThreads] forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
self.navigationItem.titleView = [button autorelease];
}
当我以模态方式呈现视图时,此代码有效,即:
[self presentModalViewController:emailThreadListVC animated:YES];
但EXC_BAD_ACCESS
如果我尝试将其推送到导航堆栈,则会出现错误,然后单击新 VC 上的“后退按钮”:
[self.navigationController pushViewController:emailThreadListVC animated:YES];
特别是在以下位置崩溃UINavigationItemTitleView
:
我得出的结论是,titleView
当我尝试返回原始 VC 时,它不再存在,这意味着当我将 VC 推送到堆栈顶部时,它autorelease
确实减少了引用计数,但是titleView
当我将引用计数减少时,它不会减少以模态方式推送 VC。
知道为什么吗?