从 xib 内的按钮单击调用 IBAction 时出错

Posted

技术标签:

【中文标题】从 xib 内的按钮单击调用 IBAction 时出错【英文标题】:Getting an error when calling an IBAction from a button click inside a xib 【发布时间】:2010-07-09 02:21:00 【问题描述】:

我遇到了一个问题,当我从某个视图控制器调用 IBaction 时,应用程序崩溃了,但我可以在其他地方获得所需的结果。

基本上我有一个隐藏在标签栏控制器中的导航控制器。如果我从导航控制器的第一个视图调用 IBActions 它工作正常,但是如果我使用 initWithNib 创建一个视图并将其推送到导航控制器堆栈,然后尝试在我推送的视图控制器实例上调用 IBAction堆栈应用程序崩溃。

当应用程序首次加载时,菜单栏中会出现一个“x”按钮,该按钮会调出地址簿选择器。这很好用。如果您单击菜单栏中的“新建”按钮,则会创建属性视图并将其推送到堆栈上。这个新视图有一个名为“选择账单”的按钮,它在 IBAction 调用中只有一个日志语句,但仍会导致崩溃。 “选择账单至”按钮的 IBAction 位于该视图视图控制器中。

如有任何帮助解决此问题,我们将不胜感激。

来源可以在http://www.swnsn.com/S4X.zip找到

【问题讨论】:

【参考方案1】:

您正在尝试将 pickBillTo: 发送到 UIViewController 的实例,而不是您的自定义子类。

在 FirstViewController.m 中,更改:

UIViewController *newView = [[UIViewController alloc] initWithNibName:@"NewOrderView" bundle:nil];

到:

NewOrderView *newView = [[NewOrderView alloc] initWithNibName:@"NewOrderView" bundle:nil];

您还必须导入 NewOrderView.h,您可能应该将该类重命名为 NewOrderViewController,并将变量命名为 newViewController,因为它是一个控制器,而不是一个视图。

【讨论】:

【参考方案2】:

我只是一个初学者。所以我的建议可能不正确。

一个。

我检查了调试器控制台,以下错误是 'NSInvalidArgumentException',原因:'*** -[UIViewController pickBillTo:]:无法识别的选择器发送到实例 0x44487f0' 我不确定是什么问题。

乙。

-(IBAction)pickBillTo:(id) selector // Your code
-(IBAction)pickBillTo:(id) sender // my suggestion

C.

你还没有释放内存 按钮、名字、姓氏、数字

【讨论】:

你可以称它为sender、selector、myVar。这就是您在方法内部访问选择器的方式。还不担心释放这些变量,因为我还没有使用它们并且被这个问题挂断了。不过感谢您的回复。

以上是关于从 xib 内的按钮单击调用 IBAction 时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac Catalyst 项目中未调用 IBAction

单击 alertView 按钮时我无法调用一个 IBaction

通过 loadNibNamed() 从 xib 加载按钮从未调用

切换xib的目标c iOS 7

从 xib 调用 viewController

无法从 xib 将 IBAction 连接到表视图