initWithCoder打破我的触摸事件(touchesBegan,touchesMoved等)

时间:2010-05-19 17:13:41

标签: iphone objective-c initialization

所以我有一个已设置的UIView,并且在每个触摸事件处理程序中,我都有一个NSLog触发了一条消息到控制台。

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

这几乎按预期工作。但是一旦我实现了initWithCoder(甚至空白)

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

我不再收到消息到我的控制台(或者显然可以点击断点)。

这是我的第一个应用程序,所以我可能错过了一些愚蠢的东西,但我查看了各种示例应用程序,并且我似乎没有遗漏任何会重新启用触摸事件的代码。

1 个答案:

答案 0 :(得分:4)

您需要像初始化一样对待-initWithCoder:,即使是空白的实施也是如此;也就是说:

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

通常只为每个对象调用一条init消息,除非您将它们链接起来。因此,如果调用-initWithCoder:,则-init 不是。当-init没有被召唤时,哦,男孩......

作为澄清方式:从nib加载的对象使用-initWithCoder:初始化,在默认实现中显然会在某处调用-init