我遇到的问题可能很容易修复,但对我来说调试并不简单。我简单地在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
看起来很简单......不管怎样?
答案 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你应该使用你的自定义类。这可能就像我的错误。