我有一个 NSBrowser 需要显示来自 REST API 的数据。有时此 API 需要一段时间才能返回结果,因此最好在后台处理网络流量(延迟获取)。有时需要刷新子树以反映服务器端的更改。
我尝试了两种不同的方法:
- 使用 NSBrowserDelegate。当 [browserDelegate browser:child:ofItem:] 或类似函数最终请求尚未加载的数据时,我返回 0 计数并启动后台处理。当数据可用时,我重新加载了列(效率不高,随着新数据的进入,用户的选择会变得混乱)。
- 使用 NSTreeController。我使用阻塞/同步方法让它工作得很好。但是,每当我更新模型时,NSBrowser 都会重置树并将选择向上移动到父级。我试过 [obj mutableArrayValueForKey] 方法。我试过 [treecontroller insertObject:atArrangedObjectIndexPath:] 方法。我已经切换了“保留选择”标志。我切换了“插入时选择”。无论我做什么,NSBrowser 都不想只干净地更新相关的子树。
底线:将数据异步加载到 NSBrowser 的最佳实践是什么?