0

我知道以前曾发布过这样的问题,但我试图获得特定于我的代码的直接答案。我看过另一篇文章,并按照它到达了这个阶段。

我的日志中有(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内容取决于 on selectedSegmentIndexaUISegmentedControl和 on aUISearchBar的选定范围。

它从我的网站域的导入中获取其值的每个数组是: modsArray itemsArray serversArray 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,但是现在在启动时,直到顶部的选项卡被更改,范围和表视图保持索引路径大于计数。我该如何解决?

4

2 回答 2

1

保持如下:

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"]];
    }
}
于 2012-09-27T21:45:28.977 回答
0

根据您在评论中的更新,您displayArray在调用它时没有任何元素objectAtIndex:。这会导致异常。您需要确保您tableView:numberOfRowsInSection:为此部分返回的行数等于displayArray' 计数。

于 2012-09-27T22:07:46.033 回答