2009-10-07 4 views
1

У меня возникла проблема, которая может быть простой в исправлении, но не простой для отладки. У меня простая кнопка внутри вида в 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

Вы отправляете getStarted на номер UIApplication, а не RootViewController. Двойная проверка, чтобы убедиться, что кнопка правильно подключена к контроллеру вида в Interface Builder. Ваш код выглядит отлично.

+0

Я кнопка подключил к файлу владелицей, чей класс личность устанавливается в RootViewController, и к правильному методу (getStarted) ... я что-то отсутствует? – 2009-10-07 17:31:48

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, в отличие от моей. Так что, наверное, как сказал Марк У., где-то вы использовали UIApplication, где вы должны были использовать свой собственный класс. Вероятно, это что-то вроде моей ошибки.

1

Похоже, вы выпустили RootViewController после добавления его в свое окно.

Опубликовать здесь фрагмент кода, в который вы добавляете RootViewController в свое окно.

BTW, попробуйте прокомментировать линию, в которой вы делаете выпуск. Таким образом, вместо использования:


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

ли это:


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

Ваш метод "getStarted" должен работать после этого.

Приветствия, VFN

Смежные вопросы