2013-02-16 8 views
6

Ich sehe hier viele Threads über, wie man den Code EXC_BAD_ACCESS = 2 löst, und die Übereinstimmung scheint zu sein, dass ich versuche, auf mein Array oder ein Objekt zuzugreifen mein Array nachdem ich es bereits veröffentlicht habe. Ich sehe, dass die meiste Zeit die Lösung scheint, dass man zu viele [release theObject] in ihrem Code hat. Das Problem für mich ist, dass ich keine Freigabeaufrufe habe, weil ich ARC verwende.Wie debugge ich EXC_BAD_ACCESS Code = 2 während ARC verwenden

Also meine Frage ist, wie gehe ich über das Debuggen selbst von diesem Punkt aus. Ich kann Code schreiben, wenn das helfen würde, aber ich denke, als ersten Schritt möchte ich nur Hilfe bei meinem nächsten Schritt und wie ich es machen soll.

Ich habe festgestellt, dass viele Threads zu sagen, dass ich NSZombiesEnabled aktivieren sollte, um die Ursache des Problems zu finden.

Bevor Zombies aktiviert wurden, würde meine App mit absolut keinem Fehler oder Warnungen bauen und laufen. Aber sobald du einen Knopf im Simulator berührst, würde es abstürzen.

Nach dem Einschalten von Zombies baut die App immer noch auf und läuft fehlerfrei, aber sie stürzt nun ab, sobald der Simulator erscheint und nun wechselt XCode in den Debug Navigator unter Tread 1 werden dort über 100.000 Einträge und aufgelistet Jeder einzelne Klick zeigt etwas im Hauptfenster an, was ich nicht weiß.

Also, was mache ich jetzt? Ich habe Zombies angemacht, und renne wieder, ich sehe eine Menge Zeug auf dem Bildschirm, aber ich weiß nicht wirklich, wie ich Kopf oder Zahl davon machen soll. Ich habe versucht, einen Screenshot zu posten, aber ich bin noch nicht befugt, das zu tun.

+0

Wir brauchen einen Code, der helfen kann. Stellen Sie sicher, dass Code um die Zeile EXC_BAD_ACCESS eingefügt wird. Mit ARC werden viele speicherbezogene Fehler von ARC automatisch berücksichtigt, da es zuweist und freigibt und nicht übermäßig freigibt. Allerdings könnte dies je nach Codelogik passieren. Also poste bitte den Code. – Spectravideo328

+0

Es wurde ein GitHub-Konto hinzugefügt, in dem das gesamte Projekt enthalten ist. Jetzt kannst du alles sehen. Sehen Sie es hier: https://github.com/jonathan3087/Matchismo – jonathan3087

Antwort

18

Ich schaute durch Ihren Quellcode und fand das Problem. Sie versuchen, die numberOfMatchingCards Eigenschaft auf self.game zu setzen, während Sie in der Mitte von game lazy loading sind und eine Endlosschleife erstellen. Dein self.game.numberOfMatchingCards wird versuchen, ein neues Spiel zu laden, da du das Spiel noch nicht fertiggestellt hast, wenn dein Setzer aufgerufen wird. Ändern Sie einfach

- (IBAction)cardModeChanged:(UISegmentedControl *)sender { 
    switch ([sender selectedSegmentIndex]) { 
     case 0: 
      self.game.numberOfMatchingCards = 2; 
      break; 
     case 1: 
      self.game.numberOfMatchingCards = 3; 
      break; 
     default: 
      self.game.numberOfMatchingCards = 2; 
      break; 
    } 
} 

zu

- (IBAction)cardModeChanged:(UISegmentedControl *)sender { 
    switch ([sender selectedSegmentIndex]) { 
     case 0: 
      _game.numberOfMatchingCards = 2; 
      break; 
     case 1: 
      _game.numberOfMatchingCards = 3; 
      break; 
     default: 
      _game.numberOfMatchingCards = 2; 
      break; 
    } 
} 

Ich bin mir nicht sicher, dass dies Ihre schlechten Zugang Problem zu lösen, aber es ist die Ursache für die vielen Einträge im Debug-Navigator. Lassen Sie mich wissen, ob Sie nach dem Beheben dieses Problems weiterhin das Problem mit dem schlechten Zugriff haben. Es ist wichtig, sich daran zu erinnern, dass Objekte, selbst wenn Sie ARC verwenden, immer noch freigegeben werden (wenn ihre Referenzanzahl auf Null fällt).

+0

Es hat das Problem behoben, ich bekomme nicht mehr die Endlosschleife, die die vielen Einträge im Debug-Navigator verursachte, genau wie du gesagt hast. Ich habe auch das Problem EXC_BAD_ACCESS gelöst. So, jetzt bekomme ich einen sauberen Build und laufe jetzt mit Warnungen und keine Fehler. Vielen Dank für Ihre Zeit beim Betrachten, ich zog mir die Haare aus. – jonathan3087

+0

Kein Problem. Froh, dass alles funktioniert! – enjayem

Verwandte Themen