2009-11-20 3 views
0

Dans cocos2d, j'essaie d'appeler une méthode sur le Parent d'un CocosNode. L'application fonctionne bien, mais je reçois un «objet» peut ne pas répondre à l'avertissement «méthode». Le parent est une couche Cocos2d sous-classée, donc je devine que j'ai besoin de lancer un parent en quelque sorte, mais cela génère des erreurs fatales.Comment réparer un 'Objet' peut ne pas répondre à l'avertissement 'méthode' dans Cocos2d

La méthode est comme ce

if(CGRectContainsPoint([newBrick boundingBox], touchedStartPoint)){ 
    [parent showChooser]; 
    return kEventHandled; 
} 

J'ai essayé d'ajouter ce qui suit, mais sans succès ...

if(CGRectContainsPoint([newBrick boundingBox], touchedStartPoint)){ 
    if([parent respondsToSelector:@selector(showChooser)]){ 
     [parent showChooser]; 
    } 
    return kEventHandled; 
} 

Toutes les idées?

Répondre

2

En supposant que showChooser est une méthode définie sur votre sous-classe, vous devriez juste pouvoir écrire:

if(CGRectContainsPoint([newBrick boundingBox], touchedStartPoint)){ 
    [(YourLayerSubclass*)parent showChooser]; 
    return kEventHandled; 
} 

ou, si vous voulez être un peu plus sûr:

if(CGRectContainsPoint([newBrick boundingBox], touchedStartPoint)){ 
    if([parent isKindOfClass:[YourLayerSubclass class]]) { 
     YourLayerSubclass *subclassParent = (YourLayerSubclass*)parent; 
     [subclassParent showChooser]; 
     return kEventHandled; 
    } 
} 
+0

excellent. Merci. Si je peux me permettre, pourquoi la deuxième option est-elle plus sûre? – gargantuan

+0

Parce que vous vérifiez explicitement que 'parent' est une instance de la classe que vous attendez, plutôt que de supposer que c'est le cas. –

+0

... qui, si l'hypothèse est fausse, pourrait provoquer un crash. Pour mettre fin à la phrase d'Otto. ;) – LearnCocos2D

Questions connexes