我正在创建一个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]
我知道这意味着数组已超出范围,但我不明白为什么。
感谢任何帮助!
答案 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];
}