Question

Quand je mets rien NSZombieEnabled = Yes est écrit à la console. Comment puis-je réparer cela? Ou pouvez-vous me conseiller tout autre outil pour un EXC_BAD_ACCESS?

Était-ce utile?

La solution

Vous avez un accident ancienne plaine. EXC_BAD_ACCESS signifie que votre application a tenté d'accéder à une adresse mémoire est invalide. Alors que la raison la plus typique de cela dans une application objective-c non GC'd est MESSAGERIE un objet après désaffectation, quelque chose que le mode Zombie détecte, cet accident particulier peut se produire un certain nombre d'autres moyens (comme l'a démontré).

Depuis votre application se bloque, vous devriez avoir une trace. Vous devez poster ici pour que backtrace chacun d'entre nous pour pouvoir vous aider.

Comme Brad dit, exécutez votre application avec le débogage activé. Dans Xcode, vous trouverez l'élément de menu « Exécuter / Debug » dans le menu « Exécuter ». Utilisez celui-là. Lorsque votre application se bloque, vous devriez voir une trace de pile dans le coin supérieur gauche de la fenêtre du débogueur.

Non, vraiment, ils n'apparaissent dans le débogueur. Une image vaut 1000 mots. text alt
(source: friday.com )

Autres conseils

"EXC_BAD_ACCESS" est pas nécessairement liée à une instance de zombie. Il peut être lié un accès à une référence non définie, comme une variable locale.

NSArray *array;
[array objectAtIndex:0]; // <- Will throw an error

Edit: drapeau NSZombie ne vous aidera à résoudre le « EXC_BAD_ACCESS » déclenchée par l'utilisation d'une instance désallouée.

Afin de résoudre les bugs, vous devez utiliser la trace de l'accident pour localiser l'emplacement qui est erroné. Ensuite, revenir en arrière dans votre code et vérifier toutes les missions et attributions.

Assurez-vous également que vous initialisez tous les pointeurs à zéro avant de les utiliser!

Si vous utilisez un pointeur sans l'initialiser à zéro ou tout autre objet, vous allez propably finir par accéder à la mémoire qui ne vous appartient pas.

Par exemple, le code suivant également donner une EXC_BAD_ACCESS qui ne traçables utilise le drapeau NSZombieEnabled causé par la dernière ligne.

RecordingLocation* closest;

//find the closest recording location
for (...)
{
    //try to find the closest object...
    //suppose we don't find anything so closest is never set.
}

if (closest!=nil)
    NSLog(@"Closest: %f,%f",closest.x,closest.y);

Je ne comprends pas comment la réponse à cette question répond vraiment à la question ..

Je me demande la même chose. à l'aide xcode4 j'ai permis NSZobmieEnabled = OUI pour arrêter quand j'accès à un objet qui a été libéré, au lieu de s'écraser avec EXC_BAD_ACCESS -. ce qui est très utile

la question à l'est:

« Quand je mets NSZombieEnabled = Oui est rien écrit sur la console. Comment puis-je résoudre ce problème ... ».

simple et directe.

Je suis la même question éprouvais. Xcode arrête avec le débogueur, mais la console ne produit aucun message. Je voudrais attendre quelque chose le long des lignes de:

"message envoyé à l'instance désallouées ...".

recherche Stack Overflow EXC_BAD_ACCESS, vous trouverez un certain nombre de personnes avec le même problème que vous avez. La grande majorité du temps que vous frappez cela, vous rencontrez des problèmes de mémoire. Si vous suivez le protocole décrit ou ici , et vous ne voyez pas des rapports de messages envoyés à des objets sorti sur la console, il est peut-être quelque chose de différent.

Avez-vous essayé de démarrer l'application dans le débogueur (Run | Debug - points d'arrêt sur)? Dès que vous appuyez sur le EXC_BAD_ACCESS, le débogueur doit arrêter. Si vous regardez la trace affichée dans le débogueur (Run | Debugger)., Il pourrait vous montrer où l'erreur est survenue

Comme je viens de passer 20 minutes à regarder heureux avec ce NSZombieEnabled ne fonctionne pas, je pensais que je rajouterais cela provoquera une EXC_BAD_ACCESS

NSArray *arr = [NSArray arrayWithObjects:@"@dog","@cat",nil];

Notez le manque '@' sur le second param. Je ne l'ai pas: -)

J'ai eu une expérience différente avec EXC_BAD_ACCESS, donc je voudrais partager.

Comme indiqué dans les questions, même si NSZombieEnabled a été vérifié, rien n'a été écrit sur la console. Après plusieurs heures de lutte dans le simulateur, j'ai décidé de l'installer sur l'appareil. Le message d'erreur que je suis arrivé de débogage avec l'appareil était plus utile.

Finalement, j'ai remarqué que je recevais erreur EXC_BAD_ACCESS et un comportement étrange parce que je renommé quelques fichiers xib un jour avant. J'ai choisi l'objet 'View Controller' pour le fichier MainWindow.xib et corrigé le NIB Nom propriété. Ensuite, tout a fonctionné correctement.

Je ne pense pas tous les EXC_BAD_ACCESS se trouve par NSZombie Activation ..
Parce que certains cas, je suis également ne reçois pas utiliser convenablement zombie ..
Je pense que EXC_BAD_ACCESS lié à l'utilisation de l'objet libéré peut voir en permettant zombie.

Et une autre question je l'ai mentionné lors de l'utilisation zombie est: Parfois, il provoque également des accidents sur le débogage. Un cas j'ai attrapé écrasé, montrant:
*** -[MagazineWebview respondsToSelector:]: message sent to deallocated instance 0x58ce2a0
Il ne se produit que sur lors de l'activation NSZombie.

Ce que je fais est,
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
Je libère le courant objet « MagazineWebview » et charger les données [URL de la requête] dans un autre objet « MagazineWebview ». Pour achiving mes quelques fonctionnalités ...

Merci

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top