Как исправить: нераспознанный селектор отправлен на экземпляр - PullRequest
1 голос
/ 07 октября 2009

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

1 голос
/ 09 января 2010

Похоже, что вы выпустили 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 должен работать после этого.

Cheers, VFN

0 голосов
/ 25 октября 2009

У меня такая же проблема, и, наконец, нашел ответ в этом сообщении на форуме: 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, где вы должны были использовать свой собственный класс. Это, наверное, что-то вроде моей ошибки.

0 голосов
/ 07 октября 2009

Вы отправляете getStarted на UIApplication, а не RootViewController. Дважды проверьте, чтобы убедиться, что кнопка правильно подключена к контроллеру представления в Интерфейсном Разработчике. Ваш код выглядит хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...