从 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