initWithCoder прерывает мои сенсорные события (touchBegan, touchMoved и т. д.) - PullRequest
0 голосов
/ 19 мая 2010

Итак, у меня есть UIView, который был настроен, и в каждом обработчике сенсорных событий у меня есть NSLog, запускающий сообщение на консоль.

- (void) touchesBegan:(NSSSet*)touches withEvent:(UIEvent*)event {
    NSLog(@"touchesBegan");
}

И это в значительной степени работает, как и ожидалось. Но однажды я реализую initWithCoder (даже пустой)

- (id)initWithCoder:(NSCoder*)coder {
   return self;
}

Я больше не получаю сообщение на свою консоль (или могу явно задавать контрольные точки).

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

1 Ответ

4 голосов
/ 19 мая 2010

Вы должны относиться к -initWithCoder: так же, как и к инициации, даже для пустой имплантации; то есть:

- (id) initWithCoder:(NSCoder *)coder {
  self = [super initWithCoder:coder];
  if (self) {
    // Do initializations. Or not.
  }
  return self;
}

Как правило, для каждого объекта вызывается только одно сообщение инициализации, если вы не объедините их в цепочку. Таким образом, если вызывается -initWithCoder:, -init не . И когда -init не называется, о мальчик ...

Как пояснение: объекты, загруженные из перьев, инициализируются с помощью -initWithCoder:, что в реализации по умолчанию явно вызывает -init где-то.

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