4

我正在与 Cocoa Programming For Mac OS X(一本好书)一起工作。本书提供的练习之一是构建一个简单的待办事项程序。UI 有一个表格视图、一个用于输入新项目的文本字段和一个用于将新项目添加到表格的“添加”按钮。

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

- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { NSLog(@"Calling numberOfRowsInTableView: %d", [todoList count]); 返回 [todoList 计数];}

- (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 足够聪明,不会在没有可绘制的内容时调用此方法。我需要调用一些方法来让表视图知道它的数据源已经改变,并且它应该重绘自己吗?

4

1 回答 1

11
-[NSTableView reloadData];

请参阅NSTableViewAPI 参考

于 2009-11-18T19:43:26.980 回答