【发布时间】:2009-11-18 19:41:23
【问题描述】:
我正在与 Cocoa Programming For Mac OS X 一起工作(一本很棒的书)。本书提供的练习之一是构建一个简单的待办事项程序。 UI 有一个表格视图、一个用于输入新项目的文本字段和一个用于将新项目添加到表格的“添加”按钮。
在后端,我有一个控制器,它是我的 NSTableView 的数据源和委托。控制器还实现了一个由“添加”按钮调用的 IBAction 方法。它包含一个 NSMutableArray 来保存待办事项列表项。单击按钮时,操作方法会正确触发并将新字符串添加到可变数组中。但是,我的数据源方法没有被正确调用。他们在这里:
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { NSLog(@"调用 numberOfRowsInTableView: %d", [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 足够聪明,不会在没有可绘制的内容时调用此方法。是否需要调用某种方法让表格视图知道其数据源已更改,并且应该重绘自身?
【问题讨论】:
标签: cocoa macos nstableview