应用程序在到达第17个uitableviewcell时崩溃

时间:2012-01-13 21:26:25

标签: iphone ios cocoa-touch uitableview uikit

我正在编写一个从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]'

2 个答案:

答案 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,是您正在崩溃的精确索引。