Oui, donc celui-ci à travers moi ou une boucle pendant un moment jusqu'à ce que je devine ce qui se passait. Avec Apple qui publie la version finale de Xcode aujourd'hui et iOS 4 qui sortira hier, j'ai finalement commencé à envisager de transférer mes applications vers iOS 4.Mauvaise erreur d'accès dans le jeu Cocos2D en SKD 4, mais pas 3
J'ai donc téléchargé le nouveau SDK et je me suis mis au travail. Après avoir travaillé un peu sur mon application, imaginez ma surprise quand j'ai eu une mauvaise erreur d'accès, (en essayant de parler à un objet désalloué). Je déteste ces erreurs, si difficile à comprendre ce qu'il faut faire. Donc, j'ai passé les 45 dernières minutes à essayer de trouver quel objet j'avais libéré. Je ne pouvais pas me souvenir de ce que j'avais changé, et les messages d'erreur ne m'aidaient pas. Je NSZombies ENABLED (Zombies !!!) et a obtenu cette erreur:
2010-06-22 15:38:28.655 ProjectPidgey[17783:207] *** -[CCTargetedTouchHandler claimedTouches]: message sent to deallocated instance 0xd834b30
Ce qui est à peu près aussi utile que cela puisse paraître. Je suis dans Cocos2D, donc je pense qu'on touche quelque chose qui n'existe plus? Mais je ne pouvais pas trouver quelque chose comme ça dans mon code. Donc, sur un coup de tête, j'ai utilisé ma version antérieure de Xcode. Compilé et installé sur le simulateur exécutant iOS 3.0. J'ai bien travaillé. Comme un charme, comme je l'avais fait.
Alors maintenant, ma question est, qu'est-ce qui se passe ici. Quelle est la différence entre SDK 4 et 3 qui provoquerait une erreur Bad Exc? Des idées? Ou peut-être que c'est un problème avec cocos2d et qui doit être mis à jour?
Edit: J'ai fait quelques déconner et a trouvé que, en supprimant cette ligne de code:
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
CGPoint touchPoint = [touch locationInView:[touch view]];
touchPoint = [[CCDirector sharedDirector] convertToGL:touchPoint];
if (![super containsTouchLocation:touch]) return NO;
[self.engine playerHitRedDot:self];
//[self.parent removeChild:self cleanup:YES]; //REMOVED THIS LINE
return YES;
}
Ensuite, il fonctionne. Donc, il semble que le gestionnaire CCTargedTouch est lié à mon sprite (qui est ensuite retiré quand je le touche) et quelqu'un ne fonctionne pas tout ... Cependant, j'ai besoin des sprites pour être enlevé (ou au moins disparaître, mais je vouloir être consciencieux), alors comment puis-je faire cela?
Merci!
Je vais marquer cela comme une réponse, mais comme cela m'a aidé dans le débogage, mais je n'ai jamais trouvé le bug réel. J'ai utilisé NSZombies dans Instruments et tout ce qui était possible pour localiser le bogue, mais finalement je l'ai laissé comme ça, un bug. Et a fait un petit hack pour le contourner (faire une chose sur OS 4, mais une chose différente sur OS 3). Cela fonctionne, mais je souhaite qu'il y ait une meilleure solution ... –