我有一个UIViewController
,它的view属性中有几个子视图(UISearchbar
和几个UIButton
)。 UIButton
连接到了IBAction
状态的典型-(IBAction)buttonPressed:(id)sender
,例如UIControlEventTouchUpInside
-无论是在IB中还是通过编程方式进行,都无关紧要。
- (void)viewDidLoad {
MUZTitleViewController *title = [[MUZTitleViewController alloc]
initWithNibName:nil bundle:nil];
self.navigationItem.titleView = title.view;
}
在我的项目中,还有一个
UINavigationController
。当我将navigationItem.titleView
的UINavigationBar
设置为我的UIViewController
视图的视图时,只要我点击其中一个按钮,就会得到EXC_BAD_ACCESS异常。我不知道为什么会这样。我上传了一个小样本项目来说明我的问题:Test010.xcodeproj(已启用ARC)
我越来越多地得出结论,使用
UIViewController
视图并将其分配给titleView
不是一个好主意,但是我在这里看不到任何替代方法。编辑:对不起,示例项目注释掉了导致异常的调用。我重新上传了链接的项目文件。
编辑^ 2:正如PengOne所指出的,我已经跳过了得到的确切错误消息:
2011-09-10 23:09:50.621 Test010[78639:f803] -[CALayer buttonPressed:]: unrecognized selector sent to instance 0x9254ae0
2011-09-10 23:09:50.623 Test010[78639:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CALayer buttonPressed:]: unrecognized selector sent to instance 0x9254ae0'
最佳答案
您是否尝试将NSZombieEnabled设置为YES?如果执行此操作,控制台将显示以下输出:
2011-09-10 22:56:23.329 Test010[6481:ef03] *** -[MUZTitleViewController
performSelector:withObject:withObject:]: message sent to deallocated
instance 0x7a7ff70
由于该项目启用了ARC,因此该行之后的某个时间似乎已释放了控制器:
MUZTitleViewController *title = [[MUZTitleViewController alloc] initWithNibName:nil bundle:nil];
我不确定最好的解决方案是什么,但是属性肯定可以防止此类异常:
// MUZDetailViewController.h
@property (strong, nonatomic) MUZTitleViewController *title;
// MUZDetailViewController.m
@synthesize title;
self.title = [[MUZTitleViewController alloc] initWithNibName:nil bundle:nil];
self.navigationItem.titleView = title.view;
关于ios - 以UINavigationControllers navigationItem.titleView的形式在自定义 View 中加注,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7374629/