Cette question m'a vraiment déconcerté ...accident tandis que dans CALayer -hitTest:
J'ai un projet iPad que j'utilise UIPanGestureRecognizer et je suis en utilisant l'appel de méthode suivante dans mon handlePanGesture:
- (AIEnemyUnit *) hitTestForEnemyUnit:(CGPoint)where {
CALayer * layer = [self hitTest:where];
while (layer) {
if ([layer isKindOfClass:[AIEnemyUnit class]]) {
return (AIEnemyUnit *)layer;
} else {
layer = layer.superlayer;
}
}
return nil;
}
Une fois que je "trouve" un calque AIEnemyUnit, je continue avec le glisser et tout fonctionne bien. Sauf au sujet autour du 6 au 10 « glisser » Je reçois un accident avec le débogueur au plus profond de la seule CALayer -hitTest:
modifying layer that is being finalized - 0x124530
*** -[NSCFSet hitTest:]: unrecognized selector sent to instance 0x124530
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason:
'*** -[NSCFSet hitTest:]: unrecognized selector sent to instance 0x124530'
Bonne réponse. Une chose: les calques retournés par 'hitTest:' et 'superlayer' ne sont pas auto-libérés, mais ils ne sont pas conservés non plus. Cela peut potentiellement provoquer un blocage: CALayer * sous-couche = [[sous-couches de couche] objectAtIndex: 0]; [sous-couche removeFromSuperlayer]; [sous-couche superlayer]; ' – rpetrich
Merci, je n'étais pas tout à fait sûr, mais je savais qu'ils n'étaient pas la propriété de l'appelant. Je l'ai réparé. – bobDevil
Merci pour la correction! J'avais changé de '@synthesize dragItem;' à un setter manuel et oublié de mettre 'dragItem = [newDragItem retain];'. J'avais vu dans d'autres posts que le message "modifier la couche en cours de finalisation" était lié à des problèmes de nombre de rétention, mais mes messages d'erreur étaient complètement différents que je n'étais pas sûr si c'était la réponse. Mais à cause des autres posts, j'ai soigneusement passé en revue mon code pour voir combien de fois j'appelais -release et -removeFromSuperlayer. J'étais tellement concentré sur l'aspect de la sortie que je ne pensais pas le retenir, alors merci –