我有一个 NSTableView,它的数据源是一个 NSMutableArray。数组的计数在 numberOfRowsInTableView: 方法中返回。
通过在其他组件(例如 NSPopupButton)中进行选择来刷新表,这会更改数组的内容并执行 reloadData 方法。
问题是有时我会得到一种数据被相互写入。因此,例如,如果计数为 4,然后在执行操作后为 10,则额外的 6 条记录写入前 4 条下方。只有在我手动上下滚动表格后,数据(正确的数据)才是显示。
控制台显示一条消息,
-[NSCFArray objectAtIndex:]: index(-1(or possibly larger)) beyond bounds (1056).
我知道错误消息似乎指出它是一个超出范围的数组,但是当我只返回时怎么会这样,比如 [array objectAtIndex: rowIndex] 在
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
方法?
此外,在 numberOfRowsInTableView 中返回的计数返回始终是正确的(我知道这一点,因为我每隔几秒就使用计时器记录计数)。
有任何想法吗?谢谢!
编辑1: 我返回的数据如下:
pc = [[PrinterClass alloc]init];
pc = [ads_printers_array objectAtIndex:rowIndex];
if (aTableColumn == tc_make)
return [pc make];
if (aTableColumn == tc_model)
return [pc model];
if (aTableColumn == tc_driver_name)
return [pc ppd];
if (aTableColumn == tc_rdp_driver)
{
if ([pc decider] == 1)
return [pc rdp];
else return [pc model];
}
我上面提到的数组填充了我创建的一个名为 PrintersClass 的类的对象。
要重新加载数据,只需像往常一样重新加载数据:
[ads_rdp_driver_table reloadData];
ads_rdp_driver_table 是 tableView 名称。
问题是这个问题是随机出现的,而不是在特定点。这就是为什么我不能指望它..