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

jer*_*son 3 macos cocoa 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];
}
Run Code Online (Sandbox Code Playgroud)

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

Bar*_*ark 11

-[NSTableView reloadData];
Run Code Online (Sandbox Code Playgroud)

请参阅NSTableViewAPI参考

  • 不要让我开始试图找到特定任务的方法,当它可能被分散(你选择的神)时,只知道有多少类和协议.这是文档中的主要缺点.要实际使用不熟悉的类,您必须阅读该类的文档,它继承的所有类以及它继承或使用的所有协议.古怪的乐趣. (9认同)
  • 我确实花了一些力气去寻找,只是在错误的地方.我检查了表视图编程指南,NSTableViewDataSource API参考和NSTableViewDelegate API参考.当你知道它已经存在的时候,这似乎很明显. (3认同)