2011-03-08 21 views
1

My Cocoa應用程序顯示給定文件夾中所有文件的文件圖標。我使用這個代碼來獲取圖標圖像:iconForFile]返回圖像0代表

NSImage *icon = [[NSWorkspace sharedWorkspace] iconForFile:thePath]; 

在一段時間後,返回的圖標沒有(0)圖像表示,而是一個大小爲32×32(默認大小爲文檔說),其他時候返回正確的圖標(如Finder所示)。

我用來檢查nil,但直到我發現,圖像是「空」當它發生我的應用程序以後會崩潰,可以這麼說

,它始終是相同的文件:一個野生動物園.webarchive (該文件夾有兩個webarchives,圖標顯示爲第一個...)

上面的代碼有什麼特別的東西嗎?這是在後臺線程中運行。難道這是問題嗎?我不能想象爲什麼它應該是一個問題,因爲沒有UI元素從該線程更新。 。

回答

0

這聽起來像你將不得不檢查一些條件,當它失敗,即大小== NSZeroSize或圖像代表的數量爲零等等,然後有一個佔位符圖像準備好時,返回的NSImage是無效的。

+0

是的,這就是我目前正在做的(檢查[[圖標表示]計數]> 0(大小是32x32)但我真的想知道爲什麼它是第二個.webarchive失敗它返回正確第一個圖標...非常奇怪 – Mark 2011-03-08 15:05:43

+0

我不知道爲什麼會這樣。你是如何創建文件的?你是直接使用Safari還是使用Applescript?另一種方法是創建一個字典NSImages的文件擴展名爲key,如果NSImage無效,請使用此緩存Finder是否顯示此文件的正確圖標 – Mark 2011-03-08 15:14:21

+0

我直接使用Safari創建文件,有時工作正常,並顯示圖標對於第二個文件,其他時間沒有。我困惑的是,對iconForFile:的調用不會失敗(並返回nil),但返回一個不可用的NSImage。 – Mark 2011-03-08 18:37:29