8
votes

Index 0 au-delà des limites pour une erreur de tableau vide

Je ne comprends pas comment déboguer ce message d'erreur:

2011-02-01 20:45:56.151 NeMe[3206:207] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSMutableArray objectAtIndex:]: index 0 beyond bounds for empty array'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x027deb99 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x0292e40e objc_exception_throw + 47
    2   CoreFoundation                      0x027d4695 -[__NSArrayM objectAtIndex:] + 261
    3   NeighborMe                          0x0000f617 -[NeighborMapViewController regionFromLocations] + 65
    4   NeighborMe                          0x0001047b -[NeighborMapViewController locationManager:didUpdateToLocation:fromLocation:] + 94
    5   CoreLocation                        0x02393870 -[CLLocationManager onClientEventLocation:] + 793
    6   CoreLocation                        0x0239218b OnClientEvent + 49
    7   CoreLocation                        0x023a8a83 _Z22CLClientInvokeCallbackP10__CLClient13CLClientEventPK14__CFDictionary + 47
    8   CoreLocation                        0x023a9b2c _Z27CLClientHandleDaemonDataFixP10__CLClientPK23CLDaemonCommToClientFixPK14__CFDictionary + 290
    9   CoreLocation                        0x023acb30 _Z24CLClientHandleDaemonDataP12__CFMachPortPvlS1_ + 1125
    10  CoreFoundation                      0x02720982 __CFMachPortPerform + 338
    11  CoreFoundation                      0x027bfff4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
    12  CoreFoundation                      0x02720807 __CFRunLoopDoSource1 + 215
    13  CoreFoundation                      0x0271da93 __CFRunLoopRun + 979
    14  CoreFoundation                      0x0271d350 CFRunLoopRunSpecific + 208
    15  CoreFoundation                      0x0271d271 CFRunLoopRunInMode + 97
    16  GraphicsServices                    0x030bd00c GSEventRunModal + 217
    17  GraphicsServices                    0x030bd0d1 GSEventRun + 115
    18  UIKit                               0x002eeaf2 UIApplicationMain + 1160
    19  NeighborMe                          0x00002818 main + 102
    20  NeighborMe                          0x000027a9 start + 53
    21  ???                                 0x00000001 0x0 + 1
)
terminate called after throwing an instance of 'NSException'


2 commentaires

Simple: votre NsmutableArray est vide et vous essayez d'y accéder aux objets. Comment créez-vous et remplissez-le?


Je ne sais rien sur iPhone Dev, mais il semble que vous accédez à l'index 0 d'un tableau vide, ce qui n'a évidemment aucun index 0.


4 Réponses :


31
votes

Vous avez un tableau vide. Vous avez essayé d'appeler [Array ObjectAindex: 0] . 0 est au-delà des limites d'un tableau vide (pas surprenant - tout est au-delà des limites d'un tableau vide).


4 commentaires

@Equinox: Vérifiez votre voisin de voisinage de la régionFromLocations méthode.


@Equinox: C'est dans [Region de voisinageViewControllerFromLocations] . Aucun numéro de ligne n'est donné dans la pile. Mais si vous l'avez dans le débogueur Xcode, allez simplement à la fenêtre du débogueur et regardez dans la trace de la pile, cela devrait vous montrer la ligne.


ok, je pense que je l'ai eu .. une question à nouveau .. Quand est le responsable de l'emplacement: (cllouerManager *) Directeur DidupdateToLocation: (CLLOCATION *) NOUVELLOCATION DUBLOCATION: (CLLOCATION *) OLDLLOCATION {appelé?


On l'appelle quand un nouvel emplacement est trouvé. Vous démarrez habituellement le processus de localisation et dès que l'emplacement de base pense qu'il connaît une approximation de l'endroit où vous êtes, il appelle cette méthode.



5
votes

Cela signifie que tôt dans [VERSERMORORMAPVIEWCONTROLLER REGIONFROCATIONS] Vous essayez d'indexer un objet NsmutableRayRay. Ce tableau a zéro des éléments dedans - il est vide. Mais vous essayez apparemment d'accéder à l'index 0, qui serait le premier élément. Comme il n'y a pas de premier élément, vous obtenez une exception.

Probablement le code que vous attendez d'avoir exécuté pour ajouter des éléments à la matrice n'a pas encore exécuté, ou il vous suffit de vérifier la longueur de la matrice avant d'essayer d'accéder à l'élément à l'index 0. Il est difficile de dire sans en sachant plus sur ce que vous faites.

GDB rapporte le décalage comme 65 octets dans la fonction, il est donc probable dans l'une des premières lignes. Vous pouvez probablement inspecter manuellement le code de la fonction pour voir ou définir un point d'arrêt sur la première ligne de la fonction et la passer à travers.


2 commentaires

Je n'ai vraiment aucune idée d'où ce tableau est


Je suppose que Meighborme est votre application et voisinapapViewController est votre code - c'est la seule chose dans la trace de la pile qui n'est évidemment pas une API d'Apple. Si vous voulez l'aide de la rétrécir, postez le code de [voisinapapViewController RegionDromLocations].



0
votes

Je voyais cette erreur, cependant, pas comme une exception, mais uniquement dans le navigateur d'émission. La solution était de simplement redémarrer Xcode, puis l'erreur était partie.


0 commentaires

0
votes

Comme Kevin Ballard a dit, cette erreur est lancée lorsque vous demandez l'élément à l'index x qui est au-delà des limites de tableau, en plus de rechercher [Array ObjectAindex: x] , cette erreur peut être même causé à partir de la syntaxe moderne tableau [x]


0 commentaires