Невозможно объяснить, как значение указателя изменяется в какао - PullRequest
1 голос
/ 16 мая 2011

Я столкнулся с ошибкой, которую мне сложно объяснить.Теперь, когда я нашел ошибку, я, конечно, могу ее исправить, но я хотел бы понять, как такая вещь могла произойти.

Мой код:

    NSLog(@"1 - self.nextPlayerButton = %@",self.nextPlayerButton);
    NSLog(@"[self.view setUserInteractionEnabled:TRUE] with self.view=%@",self.view);
    [self.view setUserInteractionEnabled:TRUE];
    NSLog(@"2 - self.nextPlayerButton = %@",self.nextPlayerButton);

, где nextPlayerButton определяется как

@property (retain) IBOutlet UIBarButtonItem  *nextPlayerButton;

Журнал:

2011-05-15 15:23:05.245 Melimemo[1261:207] 1 - self.nextPlayerButton = <UIBarButtonItem: 0x4b668c0>
2011-05-15 15:23:05.248 Melimemo[1261:207] [self.view setUserInteractionEnabled:TRUE] with self.view=<UIView: 0x4b69750; frame = (0 0; 320 460); autoresize = W+H; layer = <CALayer: 0x4b54290>>
2011-05-15 15:23:05.249 Melimemo[1261:207] 2 - self.nextPlayerButton = <UIBarButtonItem: 0x4b65880>

Как видите, self.nextPlayerButton второй раз указывает на другой объект.

Источник моей проблемыэтот self.view на самом деле не определен должным образом: я инициализирую экземпляр объекта, в котором выполняется приведенный ниже код, и не определяю, что это за представление.Тем не менее, как вызов setUserInteractionEnabled для что-либо может привести к изменению значения указателя self.nextPlayerButton?Даже начало теории поможет.

1 Ответ

0 голосов
/ 16 мая 2011

Скорее всего, вызов self.view вызывает loadView, и ваша кнопка во второй раз устанавливается на новую кнопку.

Попробуйте реализовать установщик для nextPlayerButton следующим образом:

- (void)setNextPlayerButton:(UIButton *)button {
    if (button != nextPlayerButton) {
        [nextPlayerButton release];
        nextPlayerButton = [button retain];
    }
}

Затем установите точку останова и запустите ваше приложение.Точка разрыва, вероятно, будет достигнута дважды.Вы можете посмотреть на трассировку стека, чтобы понять, почему происходит неожиданное время.

...