【问题标题】:'NSInvalidArgumentException' UIButton IBAction Error'NSInvalidArgumentException' UIButton IBAction 错误
【发布时间】:2010-04-02 01:18:22
【问题描述】:

我有一个拒绝工作的视图中的按钮。我已经在 X-Code 的空白默认视图应用程序中工作,但在我的任何应用程序中都不会工作,而是给我以下错误。

由于未捕获而终止应用 例外 'NSInvalidArgumentException',原因: '*** -[UIViewController showVicInfo:]: 无法识别的选择器发送到实例 0x3c084f0'

调试器也没有任何帮助。我已经确保我也将按钮连接到文件的所有者(而不是相反)。下面是操作的代码。而且我知道这不是警报视图,因为断点甚至没有到达那里。

关于.h

    @interface about : UIViewController {

}

-(IBAction)showVicInfo:(id)sender;

关于.m

-(IBAction)showVicInfo:(id)sender {
    UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"No Internet Connection" message:@"You require an internet connection via WiFi or cellular network for iFirelert to work." delegate:self cancelButtonTitle:@"OK, thanks" otherButtonTitles:nil];
    [myAlert show];
    [myAlert release];
}

更新:仅供参考,这就是我创建按钮的方式,如果有帮助的话。

  1. 已创建新视图(文件>新文件>UIViewControllerSubclass w/XIB 用于接口)
  2. 添加 -(IBAction)showInfo:(id)sender;到 about.h
  3. 已添加
  4. -(IBAction)showVicInfo:(id)sender { UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"没有网络 连接”消息:@“您需要一个 通过 WiFi 连接互联网或 iFirelert 的蜂窝网络 工作。” 代表:self cancelButtonTitle:@"好的,谢谢" 其他按钮标题:无]; [我的警报节目]; [我的警报发布]; } 到 about.m
  5. 在 Interface Builder 中打开 About.xib,将一个矩形按钮拖到视图上
  6. 通过按住 ctrl 单击按钮到文件的所有者属性(而不是相反),将按钮连接到 -showVicInfo 操作。
  7. 已检查文件所有者是否设置为“关于”类。

然后在 X-Code 中构建并运行失败。

更新 2:好的,我已经确定它必须是我现有项目中的设置或其他东西。我已经复制了两个类文件和 XIB 文件,它们在另一个 X-Code 项目中工作,但按钮也在现有应用程序中引发相同的错误。

【问题讨论】:

  • 如何创建about 实例?听起来您正在初始化一个普通的旧UIViewController instead。此外,这对于一个班级来说是一个糟糕的名字。至少将类名大写。也许AboutController 会很好。
  • 我已将要在 Interface Builder 中加载的 NIB 设置为 about.xib,我将重命名它,它只是一个测试类,看看它是否可以工作,但它没有。跨度>
  • about.xib中ViewController的类是什么?它在第 4 个选项卡中(我忘记了标题、身份?),但是您可以使用 command-4 键来访问它。类应该是“关于”。
  • 是的,就是这样。但仍然没有工作大声笑。现在真的很烦。
  • 检查上面的更新信息 - 我已经写了我是如何创建按钮的,也许我做错了什么?

标签: iphone interface-builder uibutton ibaction


【解决方案1】:

有同样的错误。问题是我释放了 viewController。

AnswerStructureViewController* questionVC = [[AnswerStructureViewController alloc] initWithOpts:dict];
[window addSubview:questionVC.view];
[questionVC release];

不放出来一切都好

【讨论】:

    【解决方案2】:

    我认为 Squeegy 是对的,你的 VC 是一个普通的旧 UIViewController,不接受 showVicInfo。

    您是否在 IB 中为 ViewController 设置了类(command-4)?

    或者如果你自己分配它,你是这样做的吗:

    vc = [UIViewController alloc];    // wrong class
    

    什么时候你应该这样做:

    vc = [about alloc];     
    

    错误消息告诉您 showVicInfo 被发送到 0x3c084f0。检查您创建的视图控制器的地址(如上面“vc”中的值),如果它是 0x3c084f0 这就是您的答案。当然下一次的值可能会不一样,但是在你创建它的时候 NSLog ,然后和错误信息比较一下就知道它指的是什么了。

    还要检查您是否在 IB 中正确连接了按钮。如果您选择按钮并转到按钮连接选项卡,您应该有连接。对于 Touch Up Inside 应该连接到您的操作函数,在您的 IB 中它应该连接到 showVicInfo:

    【讨论】:

    • 不幸的是,它设置为大约。还有其他想法吗?
    • 已经在上面添加了关于我如何制作按钮和添加连接的更新 - 也许有问题?
    • 为什么 .h 文件中有 showInfo: 和 .m 文件中有 showVicInfo: ?名称应匹配,无论是 showInfo 还是 showVicInfo。你确定错误消息说 showVicInfo 吗?会不会是showInfo?
    • 嗯不知道上面的代码是怎么做到的,但在 XCode 中他们都说 showVicInfo!
    • 我也看不到那个截图——它是空白的,当我点击它时,它要求我登录另一个网站。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2014-12-07
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    相关资源
    最近更新 更多