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