2014-02-10 1 views
-1

соответствующего код:Создание UIButtons Программный - непризнанный селектор направил к экземпляру

- (void) createButtons { 
    NSMutableArray *buttonTitleArray = [[NSMutableArray alloc] init]; 
    [buttonTitleArray addObject:@"Website"]; 
    [buttonTitleArray addObject:@"Blah"]; 
    [buttonTitleArray addObject:@"Blah"]; 

    int xPosition = 20; 
    for (int i = 0; i <= buttonTitleArray.count-1; i++) { 

     UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(xPosition, 25, 90, 40)]; 
     button.userInteractionEnabled = TRUE; 
     [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
     [button setTitle:[buttonTitleArray objectAtIndex:i] forState:UIControlStateNormal]; 
     button.backgroundColor = [UIColor colorWithRed:1 green:200.0/255.0 blue:0 alpha:1]; 
     button.titleLabel.font = [UIFont systemFontOfSize:17]; 

     [self.buttonArray addObject:button]; 
     xPosition += 91; 
    } 

    for (UIButton *button in self.buttonArray) { 

     [button addTarget:self action:@selector(showWebsite:) forControlEvents:UIControlEventTouchDown]; 

     [self.view addSubview:button]; 

    } 
} 

- (void)showWebsite:(UIButton *)sender { 
    NSLog(@"Website"); 
} 

В INIT:

NSMutableArray *tempArray = [[NSMutableArray alloc] init]; 
self.buttonArray = tempArray; 

Для тестирования я сделал все кнопки имеют ту же цель.

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

Любые мысли здесь?

+1

Да. Вы отправляете сообщение объекту, который он не распознает. (возможно, если вы предоставили какой класс и какой селектор, мы могли бы * на самом деле * помочь ...) –

+0

Это массив кнопок: @property (неатомный, назначить) NSMutableArray * buttonArray; – objectiveccoder001

+0

И я инициализирую его до вызова createButtons. Я также добавляю объекты в buttonArray in for loop ... – objectiveccoder001

ответ

1

По какой-то причине ваш self в вашем опубликованном коде освобождается, а местоположение указателя повторно используется ОС как UIGestureDelayedTouch.

Убедитесь, что объект, созданный вами этими кнопками, не освобождается ОС, прежде чем вы хотите использовать функцию showWebsite.

Иногда люди используют такой код:

-(void)function 
{ 
    UIViewController *controller = [[UIViewController alloc] init]; 

    [someOtherView addSubview:controller.view]; 
} 

В этом случае в конце функции контроллер получает выпущен (так как нет никаких дальнейших ссылок на него), и все, что может указывать на это в будущем будет указывать на недопустимый (освобожденный и, возможно, повторно используемый) объект.

UIButton не сохраняет объекты, установленные в качестве целей, поэтому ОС считает, что объекты действительны для выпуска, если они не сохранены ничем другим в программе.

+0

Вы были совершенно правы! Это поставило проблему. Огромное спасибо. Очень благодарен! :) – objectiveccoder001

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