0

Je reçois une erreur appelée Discussion 1: Programme de signaux recieved: « EXC_BAD_ACCESS » ici est mon codeerreur exc mauvais accès iphone

[gameArray removeLastObject]; 
[gameArray addObject:shotArray]; 
[gamesArray removeObjectAtIndex:gameNumber]; 
[gamesArray insertObject:gameArray atIndex:gameNumber]; 
NSString *path = [self findGamesPath]; 
[NSKeyedArchiver archiveRootObject:gamesArray toFile:path]; // the error is here 

Pourquoi est-il une erreur? Est-ce que quelque chose est libéré trop de fois?

Voici le code findGamesPath

- (NSString *) {findGamesPath NSArray * chemins = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); NSString * documentFolder = [paths objectAtIndex: 0]; NSString * result = [documentFolder stringByAppendingPathComponent: @ "iShotTrackGames.plist"]; renvoie le résultat; }

Répondre

1

Plus probable que non, quelque chose est publié trop de fois. Activez la détection de zombies et réessayez. Avant de faire cela, essayez d'exécuter "Build and Analyze" sur votre code et corrigez tous les problèmes qu'il identifie. Je vois que cela est étiqueté avec "thread-safety". Pourquoi? C'est à dire. Que peuvent faire d'autres threads pendant que le code ci-dessus est en cours d'exécution?

0

EXC_BAD_ACCESS signifie que vous avez un mauvais pointeur quelque part. Ces erreurs sont souvent assez faciles à repérer car le mauvais pointeur est l'un des paramètres de la méthode appelée sur la ligne où l'erreur se produit. Dans ce cas, cependant, l'archiveur va parcourir tout le graphe d'objets pointé par gamesArray, et le mauvais pointeur pourrait vraiment être n'importe où. Suivez les conseils de @ bbum pour activer NSZombies - cela vous aidera à déterminer quel pointeur est le problème.

0

Je pense savoir ce qui se passe. Votre chaîne de chemin perd sa portée dans la méthode findGamePath.

Affectez-vous la chaîne de chemin dans cette méthode et la renvoyez-vous?

Une fois qu'il perd de la portée, il est libéré de la mémoire.

Si vous tentez d'accéder à cette chaîne, EXC_BAD_ACCESS sera alors provoqué lors de l'accès à un objet publié.

Pourriez-vous poster le code findGamePath ici? Cela peut clarifier le problème plus.

Oh, et cela a plus à voir avec la gestion de la mémoire qu'avec la sécurité des threads.

+0

merci, voici le code findGamesPath –

+0

- (NSString *) {findGamesPath NSArray * chemins = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); NSString * documentFolder = [paths objectAtIndex: 0]; NSString * result = [documentFolder stringByAppendingPathComponent: @ "iShotTrackGames.plist"]; renvoie le résultat; } –