Xcode:单击按钮导致NSInvalidArgumentException

时间:2012-10-10 01:33:01

标签: iphone objective-c xcode cocoa ibaction

我正在使用Xcode 4.3.2。

我是Xcode的新手。我正在构建一个必须更改为按钮单击的不同视图的应用程序。我的文件是:AppDelegate.h / .m,GreenViewController.h / .m,SwitchViewController.h / .m,GreenView.xib - 我没有使用故事板,但我的项目要求我不使用它们(向后兼容性问题) )。

这是我的问题(看起来很简单):当我点击UIButton(置于GreenView.xib中)时,我正在尝试打印到控制台。这是我的GreenViewController.h代码

#import <UIKit/UIKit.h>
@interface GreenViewController : UIViewController
- (IBAction)switchViews:(id)sender;
@end

这是GreenViewController.m的我(已弃用)代码:

#import "GreenViewController.h"
@implementation GreenViewController

- (IBAction) switchViews:(id)sender {
    NSLog(@"Button Pressed!");
}

GreenView.xib的所有者是GreenViewController。

出于某种原因,我只有在按下UIButton(在GreenView.xib中)时才会出错:

2012-10-09 18:07:38.490 MyViewSwitcher[8655:f803] -[SwitchViewController switchViews:]: unrecognized selector sent to instance 0x688a660
2012-10-09 18:07:38.492 MyViewSwitcher[8655:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SwitchViewController switchViews:]: unrecognized selector sent to instance 0x688a660'

似乎SwitchViewController期待来自方法“switchViews”的东西,但“switchViews”仅列在GreenViewController中。之前,我在SwitchViewController中有“switchViews”,但是我删除了与方法&amp;对应的所有代码。所有的联系。我再次检查GreenViewController中的“switchViews”是否连接到GreenView.xib中的UIButton。我已经清理过&amp;重建我的项目&amp;我仍然得到这个错误。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您的错误在于您在switchViews:的实例上调用SwitchViewController方法。由于类switchViews:没有SwitchViewController的定义(因为你删除了它),因此它不知道该怎么做,而且会崩溃。

讨厌告诉你这个,但你的按钮已连接到switchViews:的{​​{1}}方法。你说“我已经仔细检查过GreenViewController中的'switchViews'是否连接到GreenView.xib中找到的UIButton”。嗯,是的,从你的崩溃,它是。但是你确定它连接到SwitchViewController实例的switchViews:函数吗?你是怎么检查这些信息的?

我建议删除连接检查器中与UIButton的所有连接。然后将其重新连接到视图控制器(您说是GreenViewController)。然后它应该显示IBActions列表,它应该只是GreenViewController方法。

如果你这样做,它仍然无效。尝试删除按钮并重新制作,然后重新连接。