超出边界的数组索引

时间:2012-02-23 09:14:00

标签: objective-c arrays

当我运行下面的代码时,我得到了

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]

据我所知,在循环中的某个点上没有到达数组的索引。 如何处理?

 int main (int argc, const char * argv[])
    {

        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

        NSArray *t = [NSTimeZone knownTimeZoneNames];

        for(id x in t)
        {
            NSArray *tmpArray = [x componentsSeparatedByString:@"/"];
               NSLog(@"%@", [tmpArray objectAtIndex:1]);
        }
        [pool drain];
        return 0;
    }

3 个答案:

答案 0 :(得分:4)

并非所有时区名称都包含斜杠。例如,UTC时区名称不包含斜杠。所以tmpArray可能只包含一个字符串,索引为0。

也许这会做你想要的:

       NSLog(@"%@", [tmpArray lastObject]);

答案 1 :(得分:1)

您应首先检查tmpArray的大小:

NSArray *tmpArray = [x componentsSeparatedByString:@"/"];
if ([tmpArray count] > 1)
    NSLog(@"%@", [tmpArray objectAtIndex:1]);

答案 2 :(得分:0)

您可能想要在访问索引1之前检查tmpArray的大小