Сбой приложения при использовании cell.textLabel.text, когда он равен ключу из онлайн-списка
Я знаю, что вопрос, подобный этому, был опубликован ранее, но я пытался получить прямой ответ, специфичный для моего кода. Я видел другой пост и следил за ним, чтобы добраться до этой стадии.
у меня есть (null) libc++abi.dylib: terminate called throwing an exception
строка в моем журнале. Я проследил это до этой строки кода:
normalCell.textLabel.text = [[displayArray objectAtIndex:indexPath.row] objectForKey:@"name"];
это по моему cellForRowAtIndexPath
метод, который имеет этот код:
static NSString *normalCellIdentifier = @"normalCell";
static NSString *topRowCellIdentifier = @"topRowCell";
UITableViewCell *normalCell = [tableView dequeueReusableCellWithIdentifier:normalCellIdentifier];
if (normalCell == nil)
{
normalCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:normalCellIdentifier];
}
UITableViewCell *topRowCell = [tableView dequeueReusableCellWithIdentifier:topRowCellIdentifier];
if (topRowCell == nil)
{
topRowCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:topRowCellIdentifier];
}
// Configure the cell...
if (searchBar.selectedScopeButtonIndex != 0)
{
normalCell.textLabel.text = [[displayArray objectAtIndex:indexPath.row] objectForKey:@"name"];
}
if (segmentedControl.selectedSegmentIndex == 0)
{
if (indexPath.section == 0)
{
[self makeButtonsForTableView:tableView atIndexPath:indexPath withTableViewCell:topRowCell];
[topRowCell addSubview:button1];
[topRowCell addSubview:button2];
topRowCell.selectionStyle = UITableViewCellSelectionStyleNone;
return topRowCell;
}
else
{
return normalCell;
}
}
else
{
return normalCell;
}
makeButtonsForTableView
У меня есть весь мой код для кнопки, но это не проблема, потому что я удалил его из кода, и проблема все еще сохраняется, поэтому мне не нужно включать это.
displayArray
варьирует его содержимое в зависимости от selectedSegmentIndex
на UISegmentedControl
и на UISearchBar
выбранная сфера.
Каждый из массивов, которые он получает свои значения от импорта из домена моего сайта, это массивы: modsArray itemsArray ServersArgin pluginsArray newItemsArray newBlocksArray newMobsArray
Спасибо за любую помощь, которую вы можете оказать.
- РЕДАКТИРОВАТЬ 22:40GMT - 27/09/2012 -
Итак, я зарегистрировал содержимое displayArray
когда приложение загружается, а это журнал
2012-09-27 22:39:56.539 AppName[22949:11303] (
)
2012-09-27 22:39:56.675 AppName[22949:11303] (
)
- РЕДАКТИРОВАТЬ 23:13GMT - 27.09.2012 -
Интересно, что когда я меняю вкладки и возвращаюсь в журнал, изменения из этого:
2012-09-27 23:13:14.074 MinePedia[23853:11303] DisplayArray Count: 0
2012-09-27 23:13:14.074 MinePedia[23853:11303] IndexPath Row: 0
2012-09-27 23:13:14.355 MinePedia[23853:11303] DisplayArray Count: 0
2012-09-27 23:13:14.355 MinePedia[23853:11303] IndexPath Row: 1
к этому
2012-09-27 23:13:14.074 MinePedia[23853:11303] DisplayArray Count: 1
2012-09-27 23:13:14.074 MinePedia[23853:11303] IndexPath Row: 1
2012-09-27 23:13:14.355 MinePedia[23853:11303] DisplayArray Count: 1
2012-09-27 23:13:14.355 MinePedia[23853:11303] IndexPath Row: 0
Кто-нибудь знает что это значит?
- РЕДАКТИРОВАТЬ 23:42 - 27/09/2012 -
Итак, проблема вроде другой, чем раньше, теперь она не падает, так что это было решено, спасибо Mayur, но теперь при запуске и до тех пор, пока вкладка не будет изменена вверху, область видимости и табличное представление останутся с indexpath больше, чем счет. Как это исправить?
2 ответа
Держите это следующим образом:
normalCell.textLabel.text = [NSString stringWithFormat:@"%@",[[displayArray objectAtIndex:indexPath.row] objectForKey:@"name"]];
Таким образом, даже если появится нулевое значение, оно не будет аварийно завершено.
Кроме того, всегда проверяйте, заполнен ли массив, только затем обращайтесь к списку, как это.
if (searchBar.selectedScopeButtonIndex != 0)
{
if(indexPath.row < [displayArray count])
{
normalCell.textLabel.text = [NSString stringWithFormat:@"%@",[[displayArray objectAtIndex:indexPath.row] objectForKey:@"name"]];
}
}
Согласно вашему обновлению в комментариях, ваш displayArray
не имеет элементов при звонке objectAtIndex:
в теме. Это вызывает исключение. Вы должны убедиться, что ваш tableView:numberOfRowsInSection:
возвращает количество строк для этого раздела, равное displayArray
Считать.