我正在使用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非常聪明,在没有任何东西可以绘制的时候不会调用这个方法。我需要调用一些方法让表视图知道它的数据源已经改变了,它应该重绘自己吗?