2009-11-18 43 views
3

如何在数据源更改时更新NSTableView?

我正与可可编程Mac OS X(一本好书)一起工作。本书给出的练习之一是构建一个简单的待办事项程序。 UI具有表格视图,用于键入新项目的文本字段和用于将新项目添加到表格的“添加”按钮。

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

- (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很聪明,在没有任何东西可以绘制时不会调用这个方法。是否有一些我需要调用的方法让表视图知道其数据源已更改,并且它应该重绘本身?

回答

11
-[NSTableView reloadData]; 

NSTableView API reference

+3

我也把一些精力来寻找,只是在错误的地方。我检查了表视图编程指南,NSTableViewDataSource API参考和NSTableViewDelegate API参考。当你知道它已经在哪里时,这似乎很明显。 – jergason 2009-11-18 19:49:07

+0

够公平的。祝你好运。 – 2009-11-18 19:56:57

+9

不要让我开始尝试找到一个特定任务的方法,当它可能分布在(您选择的神祗)只知道多少类和协议。这是文档中的主要弱点。要真正使用不熟悉的类,您必须阅读该类的文档,它所继承的所有类以及它所继承或使用的所有协议。古怪的乐趣。 – TechZen 2009-11-18 22:11:02