Absturz mit [__NSArrayM objectAtIndex:]: Index 0 über Grenzen für leere Array-Fehler

7

Ich erhalte Absturzberichte über Benutzer meiner iOS-App, stürze aber ab, ich kann mich nicht reproduzieren, noch kann ich den Fehler in eine Zeile in meinem eigenen Code zurückverfolgen (außer dass er aus Zeile 14 in main.m stammt) Dies ist jedoch die Standardanwendungs-Erstellung von iOS-Apps unter dem Absturzbericht, den ich erhalten habe.

Versteht, dass ein Objekt mit dem Index 0 irgendwann aus einem leeren Array abgerufen wird. Aber da es nicht auf meinen eigenen Code zu zeigen scheint, kann es ein Fehler in iOS sein? (Es passiert auf verschiedenen Plattformen und mit verschiedenen iOS-Versionen).

Ich hoffe, jemand hat eine Idee, was passiert oder kann mir in die richtige Richtung zeigen. Danke.

ABBRUCHBERICHT:

%Vor%     
msetten 22.10.2011, 12:01
quelle

4 Antworten

20

Eine Möglichkeit, dieses Problem zu beheben, besteht darin, einen symbolischen Haltepunkt für objectAtIndex hinzuzufügen: Dies kann zu viele Treffer für objectAtIndex führen: bevor der Debugger den gewünschten Treffer erreicht, aber garantiert gefunden wird .

Schritte in Xcode 4:

  • Anzeigen & gt; Navigatoren & gt; Breakpoint Navigator
  • klicken Sie auf '+' und wählen Sie Symbolischer Haltepunkt hinzufügen im Popup-Fenster
  • Geben Sie "objectAtIndex:" in das Textfeld "Symbol" ein und klicken Sie auf "Fertig"

Wenn Sie zur Laufzeit nicht wissen, welchen objectAtIndex: Sie schlagen, bewegen Sie den Schieberegler am unteren Rand des Debug Navigator ganz nach rechts.

    
maz 22.10.2011 22:04
quelle
3

Dies wird den Debugger an der beanstandeten Zeile stoppen:

Xcode / Edit Scheme / Diagnose / Protokoll-Ausnahmen.

    
Michael Superczynski 29.01.2012 13:47
quelle
2

Dieser Fehler bedeutet, dass Sie versuchen, ein Objekt von einem NSArray von einer Position zu erhalten, an der kein Objekt gefunden wird. Mit anderen Worten: Wenn der Index 0 ist, dann ist Ihr Array leer.
Und am wahrscheinlichsten ist es Ihr Code, wie main () Ihren Code aufruft.

    
vikingosegundo 22.10.2011 12:18
quelle
1

Sie müssen Ihr Projekt nach allen Verwendungen von objectAtIndex: durchsuchen und jeden als den Täter ausschließen. Stellen Sie sicher, dass Sie nie in einem leeren Array aufrufen.

Noch ein Tipp: Wenn Sie wissen, dass Sie nur das letzte Objekt in einem Array erhalten wollen, oder wissen Sie, dass das Array immer nur ein Objekt enthält, können Sie lastObject anstelle von% co_de verwenden % - es ist sicherer, weil es keine Ausnahme auslöst, obwohl Sie immer noch nach objectAtIndex: suchen müssen.

    
alexantd 22.10.2011 12:22
quelle

Tags und Links