循环遍历数组,索引错误

时间:2013-04-19 03:43:02

标签: ios objective-c uiscrollview nsarray nsrangeexception

我正在创建一个UIScrollView,它横向滚动,并且有一些按钮和标签(与按钮一起使用),我将以编程方式添加。

我有44个按钮和标签,所以我想通过数组创建它们。

这就是我想要做的事情(我是一个新手程序员,所以我知道这是错误的做法。

请注意,nameArray包含标签的字符串,picArray包含图片文件名的字符串。

无论如何,这是在viewDidLoad:

for (int i = 0; i < 44; i++) {
    NSIndexPath *path = [nameArray objectAtIndex:i];
    [self makeLabelsAndButtons:path];
    //NSLog(@"index path is:%@", path);
}

此for循环引用的方法如下所示:

-(void)makeLabelsAndButtons:(NSIndexPath*)indexPath{
NSString *nameString = [nameArray objectAtIndex:indexPath];
NSString *picString = [picArray objectAtIndex:indexPath];

NSLog(@"name: %@, pic:%@", nameString, picString);

}

makeLabelsAndButtons方法中的内容并不多,因为我在添加代码之前试图理解这个概念。

这是我崩溃的错误:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 54564 beyond bounds [0 .. 43]

我知道这意味着数组已超出范围,但我不明白为什么。

感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

如果nameArray包含标签的字符串,则path不是NSIndexPath,它是一个字符串。所以你要将一个字符串传递给objectAtIndex:当然,这需要一个不是字符串的整数。

即使它是NSIndexPath,您的代码仍然是错误的,因为您希望整数而不是索引路径传递给objectAtIndex。

我认为你想做的只是将我传递给你的makeLabelsAndButtons方法。

for (int i = 0; i < 44; i++) {
    [self makeLabelsAndButtons:i];
    //NSLog(@"index path is:%@", path);
}

-(void)makeLabelsAndButtons:(NSInteger)index{
    NSString *nameString = [nameArray objectAtIndex:index];
    NSString *picString = [picArray objectAtIndex:index];

    NSLog(@"name: %@, pic:%@", nameString, picString);
}

答案 1 :(得分:1)

试试这个......

要么......

for (int i = 0; i < [nameArray count]; i++) {
    NSIndexPath *path = [nameArray objectAtIndex:i];
    [self makeLabelsAndButtons:path];

}

或者像这样...

for (NSIndexPath *path in nameArray) {
    [self makeLabelsAndButtons:path];

}