2010-05-19 41 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某處。