我正在编写一个从Web中提取.txt文件的应用程序,将其解析为二维数组(实质上是。它实际上是一个NSMutableArray,每个元素都有一个NSArray),然后在UITableView中显示每个NSArray(它使用子标签加载每个NSArray。
无论如何,一旦我向下滚动到第17个单元格(索引为16),应用程序崩溃了......
UITableView应该有483个单元格(用于测试目的),但是我似乎无法滚动到第16个单元格而不会崩溃。
编辑以发布代码和错误:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
[[tableView layer] setCornerRadius:3.0];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifier"];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"identifier"]autorelease];
}
NSInteger artistIndex = 1;
NSInteger albumIndex = 3;
NSInteger dateIndex = 6;
NSInteger imageIndex = 5;
// ARTIST
CGRect frame = CGRectMake(59, 11, 244, 13);
UILabel *label = [[UILabel alloc]initWithFrame:frame];
label.font = [UIFont boldSystemFontOfSize:13];
label.textColor = [UIColor blackColor];
label.text = [[musicList.list objectAtIndex:indexPath.row] objectAtIndex:artistIndex];
[cell addSubview:label];
// ALBUM (more like description...
frame = CGRectMake(60, 30, 244, 11);
label = [[UILabel alloc]initWithFrame:frame];
label.font = [UIFont boldSystemFontOfSize:11];
label.textColor = [UIColor darkGrayColor];
label.text = [[musicList.list objectAtIndex:indexPath.row] objectAtIndex:albumIndex];
[cell addSubview:label];
// DATE
frame = CGRectMake(59, 49, 244, 10);
label = [[UILabel alloc]initWithFrame:frame];
label.font = [UIFont fontWithName:@"Helvetica" size:10.0];
label.textColor = [UIColor darkGrayColor];
label.textAlignment = UITextAlignmentRight;
label.text = [[musicList.list objectAtIndex:indexPath.row] objectAtIndex:dateIndex];
[cell addSubview:label];
// IMAGE
NSString *urlString = [[musicList.list objectAtIndex:indexPath.row] objectAtIndex:imageIndex];
NSData *urlData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:urlString]];
UIImage *myImage = [[UIImage alloc]initWithData:urlData];
UIImageView *myImageView = [[UIImageView alloc] init];
myImageView.image = myImage;
myImageView.frame = CGRectMake(8,9,44,44);
[myImageView.layer setMasksToBounds:YES];
[myImageView.layer setCornerRadius:3.0];
[[cell contentView] addSubview:myImageView];
[urlData release];
[myImage release];
[myImageView release];
[label release];
return cell;
注意:我觉得这段代码非常糟糕......如果你们有任何建议要清理它,我很乐意听到它。
这是错误信息:
*由于未捕获的异常'NSRangeException'而终止应用程序,原因:'* - [NSMutableArray objectAtIndex:]:索引6超出边界[0 .. 3]'
答案 0 :(得分:0)
您需要为cellForRowAtIndexpath
发布代码。
您还需要发布崩溃发生时获得的控制台消息。
话虽如此,听起来你渲染第17个单元的操作正在引发崩溃。它可以是从EXC_BAD_ACCESS到为NSLog传递错误参数的任何内容。
这听起来像是一个简单的修复错误。发布您的代码和错误消息。
答案 1 :(得分:0)
我的猜测是你有这个,其他人喜欢它,倒退。
label.text = [[musicList.list objectAtIndex:indexPath.row] objectAtIndex:artistIndex];
尝试,
label.text = [[musicList.list objectAtIndex:artistIndex] objectAtIndex:indexPath.row];
根据我的经验,在objective-c中处理二维数组有时会令人困惑。特别是在使用UITableViews
。
是什么让我感觉我是对的,
NSInteger artistIndex = 1;
NSInteger albumIndex = 3;
NSInteger dateIndex = 6;
NSInteger imageIndex = 5;
1 + 3 + 6 + 5 = 15
,还有一个,在16,是您正在崩溃的精确索引。