UIBarButtonItem вызывает «Нераспознанный селектор, отправленный экземпляру» - PullRequest
0 голосов
/ 05 октября 2011

Я вызываю экземпляр класса в моем main.m к моему классу Controls.m, но, кажется, он дает мне ошибку «Нераспознанный селектор отправлен в экземпляр». Есть идеи, что я здесь делаю не так? Каждый раз, когда я нажимаю кнопку, она просто падает, но не установлен ли Controls.m в self в этом коде? Не должно возникнуть проблем с поиском действия селектора теста.

main.m

- (void)loadView {
    Controls *ct = [[Controls alloc] init];
    [ct addControls];
    [ct release];
}

Controls.m

- (void)addControls {
    UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, mv.frame.size.height-60, mv.frame.size.width, 40)];
    UIBarButtonItem *barBtnDataOverlay = [[UIBarButtonItem alloc] initWithTitle:@"Test Button" style:UIBarButtonSystemItemAction target:self action:@selector(test)];
    NSArray *toolbarButtons = [[NSArray alloc] initWithObjects:barBtnDataOverlay, nil];
    toolbar.items = toolbarButtons;
    [mv addSubview:toolbar];
    [barBtnDataOverlay release];
    [toolbar release];
 }

- (void)test {
    NSLog(@"TEST button hit");
}

1 Ответ

0 голосов
/ 05 октября 2011

ct будет освобожден [ct release], так как удержание не осталось. Попытайтесь добавить свойство ct retin в свой класс, чтобы сохранить его.

В определении класса:

@property(nonatomic, retain) Controls *ct;

В вашей реализации:

@synthesize ct;

...

Измените свой loadView на что-то вроде:

- (void)loadView {
    self.ct = [[Controls alloc] init];
    [self.ct addControls];
    [self.ct release];
}

Или даже аккуратнее:

- (void)loadView {
    self.ct = [[[Controls alloc] init] autorelease];
    [self.ct addControls];
}

Вы должны также выпустить ct где-нибудь как в viewDidUnload

- (void)viewDidUnLoad {
    self.ct = nil;
}

Кстати, это в UIViewController классе? тогда метод loadView, вероятно, должен назначить переменную экземпляра view. Если вы посмотрите в документации для UIViewController, вы увидите это:

Если вы переопределите этот метод для создания своих представлений вручную, вы должны сделать это и назначить корневое представление вашей иерархии свойству представления.

...