索引0超出空数组错误的边界

时间:2011-02-02 03:49:49

标签: iphone objective-c

我不明白如何调试此错误消息:

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'

此代码中有NSMutableArray ......所以这怎么可能?

4 个答案:

答案 0 :(得分:29)

你有一个空数组。您试图致电[array objectAtIndex:0]。 0超出了空数组的范围(这并不奇怪 - 任何超出空数组的界限)。

答案 1 :(得分:4)

这意味着您在[NeighborMapViewController regionFromLocations]的早期尝试索引NSMutableArray对象。那个数组中有零元素 - 它是空的。但是你显然试图访问索引0,这将是第一个元素。由于没有第一个元素,因此会出现异常。

您希望执行以将项添加到数组的代码可能尚未执行,或者您只需要在尝试访问索引0处的元素之前检查数组的长度。很难说没有了解更多关于你正在做的事情。

gdb将偏移量报告为函数的65个字节,因此它可能位于前几行之一。您可以手动检查函数的代码以查看,或在函数的第一行设置断点并逐步执行。

答案 2 :(得分:0)

我看到这个错误,但不是例外,只是在问题导航器中。解决方案是简单地重启XCode,然后错误就消失了。

答案 3 :(得分:0)

正如Kevin Ballard所说,当你要求索引X处的元素超出数组边界时,抛出此错误,除了查找[array objectAtIndex: X]之外,这个错误甚至可能来自现代语法{{ 1}}