我知道之前发布过这样的问题,但我试图直接回答我的代码。我已经看到了另一篇文章,并且已经跟着它进入了这个阶段。
我的日志中有(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
改变其内容。
每个Arrays从我的网站域导入它的值,这些数组是: 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,但现在在启动时,直到选项卡在顶部更改,范围和表视图保留在indexpath大于计数。我该如何解决这个问题?
答案 0 :(得分: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"]];
}
}
答案 1 :(得分:0)
根据评论中的更新,当您在displayArray
上调用objectAtIndex:
时,tableView:numberOfRowsInSection:
没有任何元素。这会导致异常。您需要确保displayArray
为此部分返回的行数等于{{1}}的数量。