NSTableView不刷新?

时间:2012-05-23 13:07:25

标签: objective-c cocoa nstableview

我有一个NSTableView,其数据源是NSMutableArray。数组的计数在numberOfRowsInTableView:方法中返回。

通过在其他组件(例如NSPopupButton)中进行选择来刷新表,该组件会更改数组的内容并执行reloadData方法。

问题在于,有时我会将各种数据写入彼此。因此,例如,如果计数为4,然后在执行操作后为10,则在第一个4之下写入额外的6个记录。只有在我手动上下滚动表之后,数据(正确的数据)才是显示。

控制台显示消息

-[NSCFArray objectAtIndex:]: index(-1(or possibly larger)) beyond bounds (1056). 

我理解错误消息似乎指出它是一个超出边界的数组,但是当我只返回时,怎么可能呢?比如说- (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名称。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

将其添加到f.ex.从笔尖醒来。

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