繁体   English   中英

iPhone响应程序链中一种操作方法所需的可见性是什么?

[英]What is the required visibility of an action method in iphone responder chain?

在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文件中,我没有声明edit方法。 我这是一个随机的错误。

无论如何应该可靠地工作吗? 如何声明该方法以使其接收编辑事件有什么要求?

顺便说一句,我有报告说,触摸“编辑”栏按钮项会导致该应用在每次被触摸时崩溃,但只有数千个用户中的少数几个崩溃。 我无法复制它。

除了在编译时粘贴声明的位置之外,Objective-C方法没有“可见性”。 在运行时,它们都是相同的。

首先,操作方法带有一个参数-发送方。 因此,您的方法实际上应声明为:

- (IBAction)edit:(id)sender;

请注意,实际上IBAction被#defined定义为void 它仅由Interface Builder使用。 由于您以编程方式进行操作,因此可以使用void 当然,这引出了一个问题,即为什么要以编程方式执行操作,因为这几乎总是浪费时间,但是...超出了此问题的范围。

无论如何,是的,它应该可靠地工作。 在标头中是否声明方法在运行时的差异为零。

鉴于您的崩溃是间歇性的,听起来更像是您可能遇到了内存管理问题(或其他潜在的崩溃问题)。 您是否构建并分析了代码? 有崩溃日志?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM