0

我有一个 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 名称。

问题是这个问题是随机出现的,而不是在特定点。这就是为什么我不能指望它..

4

1 回答 1

0

您是否 100% 确定已连接委托和数据源?

您也可以在代码中执行此操作

ads_rdp_driver_table.datasource = self;
ads_rdp_driver_table.delegate = self;

添加这是在 f.ex 中。从笔尖醒来。

您还必须将 tableview 本身连接到 iboutlet,否则您不能按名称调用它。

于 2012-05-23T13:37:42.783 回答