如何在数据源发生变化时更新NSTableView?

时间:2009-11-18 19:41:24

标签: cocoa macos nstableview

我正在使用Cocoa Programming For Mac OS X(一本好书)。本书给出的一个练习是构建一个简单的待办事项。 UI具有表格视图,用于键入新项目的文本字段以及用于将新项目添加到表格的“添加”按钮。

在后端我有一个控制器,它是我的NSTableView的数据源和委托。控制器还实现了由“添加”按钮调用的IBAction方法。它包含一个NSMutableArray来保存待办事项列表项。单击该按钮时,操作方法将正确触发,新字符串将添加到可变数组中。但是,我的数据源方法未正确调用。他们在这里:

     - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView {         NSLog(@“Calling numberOfRowsInTableView:%d”,[todoList count]);         return [todoList count];     }

- (id)tableView:(NSTableView *)aTableView
objectValueForTableColumn:(NSTableColumn *)aTableColumn
row:(NSInteger)rowIndex {
    NSLog(@"Returning %@ to be displayed", [todoList objectAtIndex:rowIndex]);
    return [todoList objectAtIndex:rowIndex];
}

这是擦。 -numberOfRowsInTableView仅在应用程序首次启动时被调用,而不是每次我向数组添加新内容时都会调用。 -objectValueForTableColumn永远不会被召唤。我认为这是因为Cocoa非常聪明,在没有任何东西可以绘制的时候不会调用这个方法。我需要调用一些方法让表视图知道它的数据源已经改变了,它应该重绘自己吗?

1 个答案:

答案 0 :(得分:11)

-[NSTableView reloadData];

请参阅NSTableView API reference