Действие кнопки вызывает «недействительный селектор» сбой - почему? - PullRequest
0 голосов
/ 28 ноября 2011

Этот код приводит к ошибке «неверный селектор» при нажатии на кнопку, которую я создаю. Откуда взята функция test?

main.m

mainScreen = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)];
[self.view addSubview:mainScreen];

TaskButtons *tB = [[TaskButtons alloc] init];
[mainScreen addSubview:[tB TaskStart]]; 

TaskButtons.m

- (UIButton*)TaskStart {
   CGRect buttonFrame = CGRectMake(500, 206, 400, 35);
   UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
   button.frame = buttonFrame;
   [button setTitle:@"Task Button" forState:UIControlStateNormal];
   button.backgroundColor = [UIColor clearColor];
   button.titleLabel.textAlignment = UITextAlignmentLeft;
   button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
   [button setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal];
   [button addTarget:self action:@selector(test) forControlEvents:UIControlEventTouchUpInside];
   return button;
 }

- (void)test{
   NSLog(@"test line");
}

Кажется, что функция test не вызывается. Разве установка target кнопки на self не означает, что она должна искать в классе TaskButtons функцию с именем test?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2011
[button addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];

- (void)test:(id)sender{
NSLog(@"test line");
}

Синтаксическая проблема :) В вашем коде замените эти строки.

0 голосов
/ 29 ноября 2011

Проблема в том, что ARC освобождает созданный объект слишком рано. Таким образом, чтобы решить это, мне нужно было бы сохранить его дольше.

main.h

#import "TaskButtons.m"
@interface ViewController : UIViewController {
     TaskButtons *tB;
}

@property (nonatomic, retain) TaskButtons *tB;
...