2011-02-02 16 views
8

Nie rozumiem, w jaki sposób debugowania ten komunikat o błędzie:indeks 0 poza granice błędu pusty tablicy

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' 

Jest NSMutableArray w tym kodzie ... więc jak to jest możliwe?

+7

Prosta: twoja 'NSMutableArray' jest pusta i próbujesz uzyskać dostęp do obiektów z niej. Jak go tworzysz i zapełniasz? – BoltClock

+0

Nie wiem nic na temat iPhone'a, ale wygląda na to, że uzyskujesz dostęp do indeksu 0 pustej tablicy, która oczywiście nie ma indeksu 0. – kaoD

Odpowiedz

29

Masz pustą tablicę. Próbowałeś zadzwonić pod numer [array objectAtIndex:0]. 0 wykracza poza granice pustej tablicy (nic dziwnego - wszystko jest poza granicami pustej tablicy).

+0

Wiedziałem, że .. ale w którym wierszu jest ten błąd? – aherlambang

+0

@EquinoX: Sprawdź metodę 'NeighborMapViewController regionFromLocations'. – BoltClock

+0

@EquinoX: Jest w '[NeighborMapViewController regionFromLocations]'. W stosie nie podano numeru wiersza. Ale jeśli masz go w debugerze Xcode, po prostu przejdź do okna debuggera i spójrz w ślad stosu, powinien pokazać linię. –

4

Oznacza to, że na początku w [NeighborMapViewController regionFromLocations] próbujesz indeksować obiekt NSMutableArray. Ta tablica zawiera zero elementów - jest pusta. Ale najwyraźniej próbujesz uzyskać dostęp do indeksu 0, który byłby pierwszym elementem. Ponieważ nie ma pierwszego elementu, otrzymujesz wyjątek.

Prawdopodobnie kod, który spodziewałeś się wykonać, aby dodać elementy do tablicy, nie został jeszcze wykonany lub po prostu musisz sprawdzić długość tablicy przed próbą uzyskania dostępu do elementu na indeksie 0. Trudno powiedzieć nie wiedząc więcej o tym, co robisz.

gdb zgłasza offset jako 65 bajtów do funkcji, więc jest prawdopodobne w jednym z pierwszych kilku wierszy. Prawdopodobnie możesz ręcznie sprawdzić kod funkcji, aby zobaczyć lub ustawić punkt przerwania w pierwszym wierszu funkcji i przejść przez nią.

+0

Naprawdę nie mam pojęcia, gdzie ta tablica jest – aherlambang

+1

Zakładam, że NeighborMe to twoja aplikacja, a NeighborMapViewController to twój kod - to jedyna rzecz w śledzeniu stosu, która nie jest oczywiście interfejsem Apple API. Jeśli chcesz pomóc w zawężeniu, opublikuj kod dla [NeighborMapViewController regionFromLocations]. –

0

Ten błąd wystąpił jednak nie jako wyjątek, ale tylko w nawigatorze problemów. Rozwiązaniem było ponowne uruchomienie XCode, a następnie błąd zniknął.

Powiązane problemy