1

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

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** -[UIViewController showVicInfo:]: unrecognized selector sent to instance 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; 到大约.h
  3. 添加
  4. -(IBAction)showVicInfo:(id)sender { UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"No Internet Connection" message:@"您需要通过 WiFi 或蜂窝网络连接 Internet 才能使 iFirelert 工作。" delegate:self cancelButtonTitle:@"好的,谢谢" otherButtonTitles:nil]; [我的警报节目];[我的警报发布];} 到 about.m
  5. 在 Interface Builder 中打开 About.xib,将一个矩形按钮拖到视图上
  6. 通过 ctrl 单击按钮到文件的所有者属性(而不是相反),将按钮连接到 -showVicInfo 操作。
  7. 检查文件的所有者是否设置为“关于”类。

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

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

4

2 回答 2

2

有同样的错误。问题是我发布了viewController。

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

如果你不释放它一切都很好

于 2010-10-31T23:56:26.170 回答
1

我认为 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:

于 2010-04-02T02:24:07.963 回答