【问题标题】:IBAction Doesn't Get Called in Subview子视图中未调用 IBAction
【发布时间】:2011-07-16 18:08:42
【问题描述】:

我正在创建一个简单的应用程序,让用户在单击按钮后查看电影。您看到的第一个屏幕是带有 2 个按钮的主菜单。其中一个将用户发送到我在 IBAction 方法中这样编码的子视图:

ViewConroller *nextView = [[ViewController alloc] initWithNibName:@"NextMenu" bundle nil];
[self.view addSubview:[nextView view]];
[nextView release];

这部分很好,只是子视图在前一个视图的底部显示了一个 20 像素的条。我环顾四周,没有像this one 这样的解决方案适合我。这甚至不是主要问题。在子视图上,每当我单击一个按钮时,应用程序就会爆炸。 IBAction 方法甚至在方法内部执行一行之前就中断了。在这里,在 goBack IBAction 方法中,我试图关闭子视图并返回主菜单:

[self.view removeFromSuperview];

我的 XIB 文件中的连接是正确的,并且一切似乎都井然有序。按钮只是没有执行。我不确定它是否与添加子视图或什么有关。我在谷歌和这个网站上做了很多搜索,但我仍然找不到解决方案。

这是我遇到的错误的示例:

Terminating app due to uncaught exception 'NSInvalidArgumentException, reason: '-[__NSCFType goBack:]: unrecognized selector sent to instance 0x5640b70'

希望你们能帮帮我,这真的很令人沮丧。我觉得我什么都试过了。谢谢你的时间。如果我需要提供更多信息,请告诉我。再次感谢。

【问题讨论】:

  • 你正在释放你的 viewController 但保留 viei。这将在以后给您带来问题。我建议要么使用 presentenModalViewController 方法,要么切换到 UINavigationController。
  • 我尝试使用 ModalViewController,但仍然无法让按钮执行任何操作,只能让我的应用程序崩溃。有什么想法吗?

标签: iphone ios exception subview ibaction


【解决方案1】:
ViewController *nextView = [[ViewController alloc] initWithNibName:@"NextMenu" bundle nil];

视图控制器已创建。

[self.view addSubview:[nextView view]];

self.view 增加了 nextView.view 的值,因为它是子视图并保留了它(注意,它保留了 next.view 值而不是 nextView 本身)

[nextView release];

nextView 被释放并立即解除分配(因为它从未被任何人保留)

Button 正在尝试向已释放的对象发送消息 -> 行为未定义,在您的情况下,存在一些其他对象(或看起来像对象的东西)并且它不理解 goBack: 的含义。

这就是为什么您不应该使用自己的导航来发明轮子(尤其是如果您是新手)。请改用UINavigationController

【讨论】:

  • 感谢您的帮助。我仍然遇到同样的问题,原因是 '--[ViewController goBack:]: unrecognized selector send to instance.我也尝试使用 ModalViewController,但我的 IBAction 方法仍未执行。
  • 如果没有新代码和错误消息,您将很难判断问题所在。
  • 很抱歉。我刚刚删除了 [nextView 版本];线,这样它就不会被释放。其他一切都保持不变。唯一改变的是“由于未捕获的异常'NSInvalidArgumentException'而终止应用程序的新错误代码,原因:'-[__ViewController goBack:]:无法识别的选择器发送到实例0x561df30”
  • 我明白了。你确定ViewConroller 实现了goBack: 方法吗?运行时找不到它。
  • 我将 goBack 方法放在了 NextMenuController 中。它也应该在我的主视图控制器中吗?还是只在主视图控制器中?
猜你喜欢
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多