我有一个NSTableView,其数据源是NSMutableArray。数组的计数在numberOfRowsInTableView:方法中返回。
通过在其他组件(例如NSPopupButton)中进行选择来刷新表,该组件会更改数组的内容并执行reloadData方法。
问题在于,有时我会将各种数据写入彼此。因此,例如,如果计数为4,然后在执行操作后为10,则在第一个4之下写入额外的6个记录。只有在我手动上下滚动表之后,数据(正确的数据)才是显示。
控制台显示消息
-[NSCFArray objectAtIndex:]: index(-1(or possibly larger)) beyond bounds (1056).
我理解错误消息似乎指出它是一个超出边界的数组,但是当我只返回时,怎么可能呢?比如说 方法 此外,numberOfRowsInTableView中返回的计数返回始终是正确的(我知道这一点,因为我每隔几秒钟使用一个计时器记录计数)。 有什么想法吗?谢谢! 编辑1:
我将数据返回如下: 我上面提到的数组中填充了我创建的一个名为PrintersClass的类的对象。 要重新加载数据,它只是像往常一样重新加载数据: ads_rdp_driver_table是tableView名称。 问题是这个问题是在不在特定点上随机出现的。这就是为什么我不能指责它.. - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
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];
}
[ads_rdp_driver_table reloadData];
答案 0 :(得分:0)
您是否100%确定已连接委托和数据源?
您也可以在代码中执行此操作
ads_rdp_driver_table.datasource = self;
ads_rdp_driver_table.delegate = self;
将其添加到f.ex.从笔尖醒来。
您还必须将tableview本身连接到iboutlet,否则无法按名称调用它。