我一直在谷歌上搜索这个主题,但似乎无法就此类问题的解决方案达成共识。当我将数据源与 NSTableView 一起使用时,如果我需要在后台填充数据源,我的脑海中会出现几个有关线程的问题。我希望在这里得到一些指导。
如果我修改主线程调用 [NSTableView numberOfRowsInTableView:] 和 [NStableView tableView:objectValueForTableColumn:row:] 之间的数据源,会发生什么?如果 TableView 请求的对象不再有效,我该怎么办?
仅在主线程上更改数据源是否可以解决这种情况?
如果答案是 2,它是否适用于使用绑定(bind)的情况?
最佳答案
如果您的数据源需要一些时间来填充,并且您当前显示的是包含较旧数据的表格,我认为您有几个选择:
- 在重新填充发生时在 UI 上显示旋转图标,然后调用 [tableView reloadData]
- 保留旧数据,以便 tableView 保持响应,然后在获取/计算新数据后,告诉数据源有关新 NSArray(或保存新数据的任何对象)的信息,并调用 [tableView reloadData]。里>
您无法动态更改支持数据源的数据,除非您随时通知 tableView 每个项目/行的更改。
为了解决线程部分,您可以使用后台线程填充新数据的 NSArray,一旦完成切换到主线程,然后调用 [dataSource setBackingArray:newStuff]; [tableView重新加载数据];
关于objective-c - 异步更新 NSTableView 数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24938725/