1

我正在创建一个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]

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

任何帮助表示赞赏!

4

2 回答 2

1

如果 nameArray 保存标签的字符串,那么 path 不是 NSIndexPath,它是一个字符串。所以你将一个字符串传递给 objectAtIndex: 当然它需要一个整数而不是字符串。

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

我认为您想要做的只是将 i 传递给您的 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);
}
于 2013-04-19T03:52:28.103 回答
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];

}
于 2013-04-19T04:12:30.290 回答