如何修复:发送到实例的无法识别的选择器

时间:2009-10-07 17:20:08

标签: iphone

我遇到的问题可能很容易修复,但对我来说调试并不简单。我简单地在IB的视图中有一个按钮;文件的所有者设置为我正在使用的视图控制器类,在进行连接时,一切似乎都很好,即。连接器正在寻找我试图调用的方法等。

然而,我收到此错误:由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'*** - [UIApplication getStarted:]:无法识别的选择器发送到实例0x3d19130'

我的代码如下:

RootViewController.h

@interface RootViewController : UIViewController {
IBOutlet UIButton* getStartedButton;
}

@property (nonatomic, retain) UIButton* getStartedButton;

- (IBAction) getStarted: (id)sender;

@end

RootViewController.m

#import "RootViewController.h"
#import "SimpleDrillDownAppDelegate.h"


@implementation RootViewController

@synthesize  getStartedButton;

- (void)viewDidLoad {
    [super viewDidLoad];
}


- (IBAction) getStarted: (id)sender {
    NSLog(@"Button Tapped!");
    //[self.view removeFromSuperview];  
}

- (void)dealloc {
    [getStartedButton release];
    [super dealloc];
}

@end

看起来很简单......不管怎样?

3 个答案:

答案 0 :(得分:1)

看起来你在将RootViewController添加到窗口后已经发布了它。

在这里发布您将RootViewController添加到窗口的代码段。

顺便说一下,试着评论你发布的那一行。所以,而不是使用:


RootViewController *viewController = [[RootViewController alloc] init];
[window addSubview:viewController.view];
[viewController release];

做到:


RootViewController *viewController = [[RootViewController alloc] init];
[window addSubview:viewController.view];
//[viewController release];

你的方法“getStarted”应该在那之后工作。

干杯, VFN

答案 1 :(得分:0)

您将getStarted发送给UIApplication而非RootViewController。仔细检查以确保按钮正确连接到Interface Builder中的视图控制器。你的代码看起来很好。

答案 2 :(得分:0)

我有同样的问题,终于在这个论坛帖子中找到了答案: http://iphonedevbook.com/forum/viewtopic.php?f=25&t=706&start=0

当您将视图控制器类实例化为推入导航控制器或类似控件时,必须确保使用自定义类名实例化它,而不是UIViewController。这很容易被遗漏,也很难调试。

例如:

// this is wrong 
RootViewController *viewController = [[UIViewController alloc] initWithNibName:@"TestView" bundle:nil];

// It should be 
RootViewController *viewController = [[RootViewController alloc] initWithNibName:@"TestView" bundle:nil];

希望它有所帮助!

PS:哎呀。刚注意到你的错误说的是UIApplication,而不是UIViewController,不像我的。所以可能就像Marc W所说的那样,在某个地方你已经使用了UIApplication你应该使用你的自定义类。这可能就像我的错误。