2016-07-30 41 views
1

我想構建一個簡單的屏幕保護程序。我做的第一件事是從資產目錄加載圖像[[NSImage imagedNamed:]],該方法返回一個零值,這意味着它無法找到圖像。當我嘗試使用方法[[NSBundle mainBundle]URLForImageResource:]直接從包中加載圖像時,我也得到一個零值。我不明白爲什麼會發生這種情況。該圖片位於資產目錄和項目設置中,我已將其設置爲資源包。爲什麼我無法加載位於資產目錄中的圖像?

+0

'[NSImage imageNamed:]'用於訪問應用程序包中的圖像,而不是資產目錄。爲什麼你不能將圖像放入應用程序包中? – Droppy

+1

我已經爲視網膜和非視網膜mac優化了我的圖像版本,所以我認爲最好的方式就是資產目錄。當然,我可以直接將圖像放在應用程序包中,但這也不起作用。 – ok404

回答

0

當我繼續在互聯網上搜索後,我發現屏幕保護程序是作爲某種插件執行的,並且通過加載主包我加載了系統偏好包,這意味着我無法通過加載我的資源主包,而不是我必須加載捆綁bundleIdentifier或束保存的路徑。 所以我的代碼看起來像現在這樣:

NSBundle*bundle=[NSBundle bundleWithIdentifier:@"com.myname.APOD"]; 
NSImage*image=[[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"appimage" ofType:@"png"]]; 
0

可以通過名字資產目錄訪問圖像,但不使用的NSImageimageNamed:方法 -

相反,你可以查詢圖像資源的bundle具體名稱,例如找到類的包的圖像請求圖像您可以:

NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 
NSImage *myImage = [bundle imageForResource:@"MyImageName"]; 

其中MyImageName指的是你在你的資產目錄分配的映像名稱。

相關問題