我正在学习创建表视图的教程。它展示了如何定义numberOfRowsInTableView
和viewForTableColumn
这两个函数,以及如何将表连接到AppDelegate(dataSource和delegate(。
这个教程——正如所写的那样——运行得很好。我可以毫无疑问地看到所提供的数据。但是,后来我在窗口中添加了一个工具栏(NSToolbar(,现在应用程序不再以一致的方式运行。
在添加工具栏之前,awakeFromNib
总是在numberOfRowsInTableView
之前调用。这是一件好事,因为awakeFromNib
是教程所说的添加表内容的地方。。。因此,如果不先完成,那么表内容将为空。
现在,在将工具栏添加到窗口后,numberOfRowsInTableView
总是在awakeFromNib
之前被调用!更奇怪的是,有时我会启动应用程序,它会被第二次调用。在其他发射中,它只会被调用一次。当它第二次被调用时,我会看到表数据,因为第二次调用将发生在awakeFromNib
之后。但是,当它只被调用一次时,它总是在awakeFromNib
之前被调用,因此表中没有显示任何内容:
应用程序启动编号 | 结果 | |
---|---|---|
1 | numberOfRowsInTableView 在awakeFromNib 之前调用一次(未显示数据( |
|
2 | numberOfRowsInTableView 被调用两次;awakeFromNib 之前和之后各一次(显示数据( |
|
3 | numberOfRowsInTableView 被调用两次;awakeFromNib 之前和之后各一次(显示数据( |
|
4 | numberOfRowsInTableView 被调用两次;awakeFromNib 之前和之后各一次(显示数据( |
|
5 | numberOfRowsInTableView 被调用两次;awakeFromNib 之前和之后各一次(显示数据( |
|
6 | numberOfRowsInTableView 被调用两次;awakeFromNib 之前和之后各一次(显示数据( |
|
7 | numberOfRowsInTableView 被调用两次;awakeFromNib 之前和之后各一次(显示数据( |
|
8 | 在awakeFromNib 之前调用一次numberOfRowsInTableView (未显示数据( |
|
9 | numberOfRowsInTableView 被调用两次;awakeFromNib 之前和之后各一次(显示数据( |
|
10 | numberOfRowsInTableView 被调用两次;awakeFromNib 之前和之后各一次(显示数据( |
|
11 | numberOfRowsInTableView 在awakeFromNib 之前调用一次(未显示数据( |
|
12 | numberOfRowsInTableView 在awakeFromNib 之前调用一次(未显示数据( |
因此,该教程似乎让我误入歧途,因为它忽略了填充NSTableView内容的一个关键因素:初始化数据源后应始终调用reloadData
。
完成上述操作(在awakeFromNib
结束时调用reloadData
(后,无论我是否向窗口添加了工具栏,表内容总是在应用程序启动时显示。
首先,您的表视图将取决于您的数据-在这里是您的歌曲列表。因为您是从nib创建视图的,所以init数据将自动为空,因为最初没有数据。这就是你的问题所在。
每当更新数据(如insert/update(时,表视图都不会自动更新,因此需要调用方法reloadData才能更新表视图。
[tableView reloadData];