NSInvalidArgumentException

时间:2009-08-31 17:51:18

标签: iphone cocoa-touch

我的头发在这里撕裂了。已经阅读了许多描述如何解决这个问题的例子,但没有一个帮助我摆脱这个问题。

在UIView上有一个链接到IBAction的简单按钮。

代码就是这个......

Contact.h

#import <UIKit/UIKit.h>

@interface Contact : UIViewController {
}

-(IBAction)buttonPressed:(id)sender;

@end

Contact.m

#import "Contact.h"

@implementation Contact

- (IBAction)buttonPressed:(id)sender  
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Button Pressed" message:@"You pressed the button" delegate:nil cancelButtonTitle:@"Yep, I did." otherButtonTitles:nil];
    [alert show];
    [alert release];
}

不断收到此错误消息:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIViewController buttonPressed:]: unrecognized selector sent to instance 0xd1d5f0'

Touch Up Inside使用buttonPressed链接到文件的所有者。

已经下载了其他示例代码并且工作正常。我的项目和笔尖的设置与其他示例代码完全相同。

还没知道哪里开始尝试调试它。

有人帮忙吗?

4 个答案:

答案 0 :(得分:5)

我有同样的问题。这是因为您的ViewController位于TabBarController下,在其下的View Controller中,您将NIB名称设置为Contact,但未在标识窗格中将Class设置为Contact。

答案 1 :(得分:1)

在Interface Builder中,您需要告诉它File类的所有者是什么类。单击“文件所有者”图标,转到检查器中的“身份”窗格(末尾的“i”图标),然后将“类”更改为“联系人”。

答案 2 :(得分:0)

您确定要粘贴正确的代码吗?您的Contact.m应包含一个包含实现的@implementation块,而不是包含定义的@interface

Contact.m:

#import "Contact.h"

@implementation Contact

- (IBAction)buttonPressed:(id)sender
{
    NSLog(@"buttonPressed");
}

@end

答案 3 :(得分:0)

  

刚刚创建了一个全新的项目,除了UIView和按钮之外什么都没有,它仍在发生

这让我觉得你没有把事情做好。如果这是应用程序nib文件,并且它只包含UIView,则文件所有者将成为您的应用程序委托,无论您将文件所有者的类型设置为IB。

尝试以下方法:

  1. 在您的nib文件中创建Contact的实例:拖动UIViewController对象,并将其类设置为Contact

  2. 将视图和按钮连接到Contact实例。

  3. 如果有效,请告诉我们:)