2010-05-19 3 views
0

J'ai donc un UIView qui a été configuré, et dans chaque gestionnaire d'événements tactiles, j'ai un feu NSLog d'un message à la console.initWithCoder briser mes événements tactiles (touchBegan, touchMoved, etc)

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

Et cela fonctionne à peu près comme prévu. Mais une fois que je mets en œuvre initWithCoder (même vide)

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

Je ne reçois plus le message à ma console (ou peut frapper des points d'arrêt évidemment).

Ceci est ma première application, donc je manque probablement quelque chose de stupide, mais j'ai regardé à travers divers exemples d'applications et je ne semble pas manquer de code qui réactiverait les événements tactiles.

Répondre

4

Vous devez traiter -initWithCoder: comme vous le feriez pour init, même pour une implentation vide; c'est-à-dire:

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

Un seul message init est généralement appelé pour chaque objet, sauf si vous les enchaînez. En tant que tel, si -initWithCoder: est appelé, -initn'est pas. Et quand -init n'est pas appelé, oh boy ...

En guise de clarification: les objets chargés de grué sont initialisés avec -initWithCoder:, qui, dans l'implémentation par défaut appelle évidemment quelque part -init.