Cocoa 具有异步数据的NSBrowser/NSTreeController

Cocoa 具有异步数据的NSBrowser/NSTreeController,cocoa,nstreecontroller,nsbrowser,Cocoa,Nstreecontroller,Nsbrowser,我有一个NSBrowser,它需要显示来自RESTAPI的数据。有时,此API需要一段时间才能返回结果,因此最好在后台惰性抓取中处理网络流量。有时需要刷新子树以反映服务器端的更改 我尝试了两种不同的方法: 使用NSBrowserDelegate。当[browserDelegate browser:child:of Item:]或类似函数最终请求尚未加载的数据时,我返回0计数并启动后台处理。当数据可用时,我会重新加载列,但效率不是很高,当新数据出现时会干扰用户的选择。 使用NStree控制器。我使

我有一个NSBrowser,它需要显示来自RESTAPI的数据。有时,此API需要一段时间才能返回结果,因此最好在后台惰性抓取中处理网络流量。有时需要刷新子树以反映服务器端的更改

我尝试了两种不同的方法:

使用NSBrowserDelegate。当[browserDelegate browser:child:of Item:]或类似函数最终请求尚未加载的数据时,我返回0计数并启动后台处理。当数据可用时,我会重新加载列,但效率不是很高,当新数据出现时会干扰用户的选择。 使用NStree控制器。我使用阻塞/同步方法使其工作良好。但是,每当我更新模型时,NSBrowser都会重置树并将选择向上移动到父级。我尝试过[obj mutableArrayValueForKey]方法。我已经尝试了[treecontroller insertObject:atArrangedObjectIndexPath:]方法。我已经切换了保留选择标志。我已经切换了“插入时选择”。无论我做什么,NSBrowser都不希望只干净地更新相关子树。
一句话:将数据异步加载到NSBrowser中的最佳实践是什么?

Hello。你找到令人满意的方法了吗?我将实现一个类似的组件..绑定方法在幕后涉及了太多未知的魔法。NSBrowserDelegate方法被证明是问题最少的。一个合理的折衷办法是显示一个临时加载。。。项,然后重新加载包含有效项的列。