在UIViewController子类中,我创建了一个条形按钮项,用于触发响应者链中的事件:
UIBarButtonItem* editListsButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStyleBordered target:nil action:@selector(edit)];
self.navigationItem.leftBarButtonItem = editListsButton;
[editListsButton release];
在祖先UIViewController子类的实现中(即在.m文件中),我有以下内容:
@interface GroupController (PrivateMethods)
- (void) edit;
@end
- (void) edit {
... do something here ...
}
当然在相应的.h文件中我不声明编辑方法。这是我的随机错误。
这应该可靠吗?如何声明方法以便接收编辑事件有什么要求?
顺便说一句,据我所知,触摸“编辑”栏按钮项会导致应用程序每次触摸时都会崩溃,但仅限于成千上万的用户。我无法重现它。
答案 0 :(得分:1)
除了在编译时粘贴声明的地方之外,Objective-C方法没有“可见性”。在运行时,它们都是一样的。
首先,动作方法采用参数 - 发送者。因此,您的方法确实应该声明为:
- (IBAction)edit:(id)sender;
请注意IBAction
实际上#defined为void
。它仅由Interface Builder使用。由于您以编程方式执行操作,因此可以使用void
。当然,这引出了一个问题,即为什么你以编程方式做事,因为这几乎总是浪费时间,但......超出了这个问题的范围。
无论如何,是的,它应该可靠地运作。是否在头中声明方法在运行时会产生零差异。
鉴于您的崩溃是相当间歇性的,听起来更像是您可能遇到内存管理问题(或其他潜在的崩溃)。您是否构建并分析了代码?有崩溃日志?