2010-05-19 37 views
0

所以我有一个已经设置一个UIView,并在每个触摸事件处理程序我有一个NSLog的火了一个消息到控制台。的initWithCoder打破我的触摸事件(touchBegan,touchMoved等)

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

而且这个功能与预期相当。但是,一旦我实现的initWithCoder(甚至是空白)

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

我不再收到消息,我的控制台(或可明显触及断点)。

这是我的第一个应用程序,所以我可能失去了一些东西愚蠢的,但我已经通过各种实例的应用程序看上去和我似乎没有丢失任何代码,将重新启用触摸事件。

回答

4

你需要把-initWithCoder:,你会初始化,即使是空白implentation;也就是说:

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

通常只为每个对象调用一个init消息,除非您链接它们。因此,如果-initWithCoder:叫,-init。当-init没有被调用,哦,男孩...

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