Приложение падает при достижении 17-го uitableviewcell - PullRequest
0 голосов
/ 14 января 2012

Я пишу приложение, которое извлекает файл .txt из Интернета, анализирует его в 2-мерный массив (по сути. Это фактически NSMutableArray с NSArray для каждого элемента), а затем отображает каждый NSArray внутри UITableView ( он загружает каждый 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 голосов
/ 14 января 2012

Я предполагаю, что у вас есть это, а другим нравится, назад.

label.text = [[musicList.list objectAtIndex:indexPath.row] objectAtIndex:artistIndex];

Try,

label.text = [[musicList.list objectAtIndex:artistIndex] objectAtIndex:indexPath.row];

По моему опыту, работа с двумерными массивами вцель-c может иногда сбивать с толку.Особенно при работе с UITableViews.

У меня возникает ощущение, что я прав:

NSInteger artistIndex = 1;
NSInteger albumIndex = 3;
NSInteger dateIndex = 6;
NSInteger imageIndex = 5;

1 + 3 + 6 + 5 = 15, и еще один, в 16, - точный индексчто вы терпите крах.

0 голосов
/ 14 января 2012

Вам необходимо отправить код для вашего cellForRowAtIndexpath.Вам также нужно опубликовать консольное сообщение, которое вы получите, когда произойдет сбой.

При этом звучит так, будто ваша операция по рендерингу 17-й ячейки вызывает сбой.Это может быть что угодно, начиная от EXC_BAD_ACCESS и заканчивая передачей неправильных аргументов для NSLog.

Это звучит как простая ошибка, которую нужно исправить.Разместите свой код и сообщение об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...