0

我有一个NSCollectionView其中一个子视图是NSImageView。实际的图像需要经过API调用后才从Web服务器加载(实际上是两个网络请求)。很明显,我需要异步加载图像。我可以将NSImageView的值与NSValueTransformer绑定,将模型ID转换为NSImage,但是如何实现NSValueTransformer?它预计立即从其transformedValue:方法返回,而我只能在那里发出网络请求。我不想阻止使用同步网络的线程。NSCollectionView与网络图像

回答

2

而不是使用实际上会立即返回的NSValueTransformer子类集合视图项目。对于每个项目在这个子类中异步激发事务。 在您的子类中为NSImage保留一个IBOutlet,以便当从服务器接收到响应时,使用此IBOulet设置图像。 使用此方法创建项目时,相应的视图控制器会进入画面。通过继承它,您可以控制视图以及如何加载视图。

我希望这会有所帮助。

+0

好的,当我创建子类时,是否给它自己的nib文件?或者我现在只使用收藏视图所在的笔尖?那么,我会重写什么方法来设置图像? setValue:forKeyPath:?我如何将绑定连接到子类?我是否必须在代码中完成所有工作?或者我可以使用界面构建器吗? – jsd

+0

您有为每个集合视图项目定义的itemProtype。子类集合视图项目,它会自己选择你的itemprototype,即笔尖将采取的。在这个新的子类中创建一个NSImageView的IBOutlet。在loadView中调用[super loadView]并调用您的事务。一旦在你的回调方法中接收到数据,然后使用IBOutlet的setImage方法设置图像。子类仅用于处理异步调用,因此在“接口”构建器中,更改集合视图项的类。我希望你明白了。如果你愿意,我会添加一些代码。 –

+0

我明白了。我不得不重写NSCollectionViewItem子类中的setRepresentedObject。另外请确保你参考视图强制它从笔尖加载,否则它可能是零售点。 – jsd