Сбой приложения при использовании 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Считать.

Другие вопросы по тегам