Les accidents avec [__NSArrayM objectAtIndex:]: indice de 0 au-delà des limites de tableau vide d'erreur
Je reçois des rapports de plantage par les utilisateurs de mon application iOS, mais crash je ne peux pas reproduire moi-même, je ne peux tracer l'erreur de retour à la ligne dans mon propre code (sauf qu'il provient de la ligne 14 dans la main.m mais c'est l'application par défaut la création d'applications iOS. Ci-dessous le rapport de crash que j'ai reçu.
À comprendre qu'à un certain moment, l'objet est à l'index 0 est en train d'être récupérées à partir d'un Tableau vide. Mais comme il ne semble pas au point à mon propre code, peut-il être un bug dans iOS? (Il arrive sur les différentes plates-formes et avec différentes versions iOS).
J'espère que quelqu'un a une idée de ce qui se passe ou peut me pointer dans la bonne direction.
Merci.
RAPPORT DE CRASH:
Incident Identifier: [TODO]
CrashReporter Key: [TODO]
Process: Mary Black [797]
Path: /var/mobile/Applications/28A68F8B-294E-4B86-9E75-ED5484E5EF4D/Mary Black.app/Mary Black
Identifier: net.broset.Mary-Black
Version: 225
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2011-10-14 03:47:32 +0000
OS Version: iPhone OS 5.0 (9A334)
Report Version: 104
Exception Type: SIGTRAP
Exception Codes: #0 at 0x35b07848
Crashed Thread: 0
Application Specific Information:
*** Terminating app due to uncaught exception \\\'NSRangeException\\\', reason: \\\'*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array\\\'
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x00010848 __kill + 8
1 CoreFoundation 0x000b9987 __handleUncaughtException + 75
2 libobjc.A.dylib 0x000092d1 _objc_terminate + 129
3 libc++abi.dylib 0x000043c5 _ZL19safe_handler_callerPFvvE + 77
4 libc++abi.dylib 0x00004451 operator delete(void*) + 1
5 libc++abi.dylib 0x00005825 __cxa_current_exception_type + 1
6 libobjc.A.dylib 0x00009235 objc_exception_rethrow + 13
7 CoreFoundation 0x0000f545 CFRunLoopRunSpecific + 405
8 CoreFoundation 0x0000f3a5 CFRunLoopRunInMode + 105
9 GraphicsServices 0x00003fed GSEventRunModal + 157
10 UIKit 0x00031743 UIApplicationMain + 1091
11 Mary Black 0x00002fa7 main (main.m:14)
Êtes-vous à l'aide de ce avec UICollectionView??
Je suis une trace similaires lorsque vous tentez de modifier un collectionView .collectionViewLayout de la propriété. Vous avez mentionné UICollectionView; est-ce à dire que vous avez une idée?
OriginalL'auteur msetten | 2011-10-22
Vous devez vous connecter pour publier un commentaire.
Une façon de déboguer ce problème est d'ajouter une Symbolique point d'arrêt sur objectAtIndex: Cela peut entraîner de nombreux frappe à objectAtIndex: avant le débogueur frappe celui que vous êtes après, mais c'est la garantie de trouver.
Étapes dans Xcode 4:
au moment de l'exécution, si vous ne pouvez pas dire qui objectAtIndex: vous êtes à la frapper, déplacez le curseur au bas du Navigateur de Débogage tout le chemin vers la droite.
Il peut être difficile de corriger un bug si vous ne pouvez pas reproduire le problème vous-même. Comme une question de fait, vous remarquerez que dans la plupart des bug tracking, il est généralement une section "Étapes Pour Reproduire". Bug la reproductibilité est probablement la plus grande étape à fait la correction d'un bogue. Si vous ne pouvez pas reproduire, vous aurez besoin de collecter un grand nombre de journaux et de faire l'analyse des journaux.
merci pour le mini tuto
OriginalL'auteur maz
Cela va arrêter le débogueur à la ligne incriminée:
Xcode/Modifier Le Régime De/Diagnostics/Journal Des Exceptions.
Non, Il n'est pas. Quelle est la version de Xcode do u? Quels sont les autres paramètres ferons-nous?
OriginalL'auteur Michael Superczynski
Cette erreur signifie, que vous essayez d'obtenir un objet à partir d'un NSArray à partir d'une position où aucun objet n'est trouvé. En d'autres termes: si l'indice est égal à 0, que votre tableau est vide.
Et le plus probable, c'est votre code, en tant que main() appelle votre code.
OriginalL'auteur vikingosegundo
Vous besoin de chercher votre projet pour tous les usages de
objectAtIndex:
et de la règle de chacun comme le coupable. Assurez-vous que vous êtes jamais de l'appeler sur un tableau vide.Une autre astuce: Si vous savez que vous ne voulez obtenir le dernier objet dans un tableau, ou vous connaissez le tableau ne contient qu'un seul objet, vous pouvez utiliser
lastObject
au lieu deobjectAtIndex:
-- c'est plus sûr car il ne va pas faire une exception, si vous avez encore besoin de vérifier pournil
.OriginalL'auteur alexantd