当NSCollectionView绑定大量数据时,是否可以使NSProgressIndicator旋转



我有一个NSCollectionView,它需要加载大约1000个项目(项目只包含文本,不包含图像或其他丰富的内容)。

我想在UI上放一个旋转的NSProgressIndicator,让用户知道它正在工作,但发现指示器出现在UI上,根本不旋转。事实上,当NSCollectionView加载数据时,整个UI都挂起了,看起来NSCollectionView任务占据了该绑定任务100%的主线程。

在结合发生的时候,我有可能使NSProgressIndicator旋转吗?

编辑:

我使用NSArrayController作为数据源,并将NSCollectionView的内容绑定到arrayController.arratedObjects,当向arrayController添加新项时,collectionView会自动更新。

如果我把绑定任务放在一个辅助线程上,我观察到每个项目都会一个接一个地出现在UI上,每个项目大约需要0.5秒,因为大约有1000个项目需要绑定,所以任务需要很长时间才能完成。

我想要的是,当我想将新项目绑定到collectionView时,绑定会在主线程外运行,progressIndicator会顺利旋转,当整个加载任务完成时,collectionView会更新,progreseIndicator也会消失。

您需要将NSCollectionView的项加载移动到辅助线程,这样它就不会阻塞主事件循环(NSProgressIndicator计时器正在运行)。请参阅SourceView示例代码项目;特别是IconViewController.m源文件中的gatherContents:方法。

最新更新