2009-11-02 49 views
0

有人建議我使用這一行代碼從資源文件夾/項目包中調用一個圖像。我也看到它在許多不同的網站教程中完全像這樣使用。可可 - 這個代碼使用NSBundle的問題

NSBundle *mb=[NSBundle mainBundle]; 


NSString *fp=[mb pathForResource:@"topimage" ofType:@"PNG"]; 


NSImage *image=[NSImage initWithContentsOfFile:fp]; 

不過,我收到以下警告:

NSImage中可能不響應+ initWithContentsOfFile +

爲NSImage中的文檔顯示,initWithContentsOfFile其實應該工作的方法。我可能會在這裏錯過什麼?

+0

這是「Mac」而不是「MAC」 - 兩個非常不同的主題。 – 2009-11-02 11:26:16

回答

5

你錯過了一個+alloc

NSImage* image = [[NSImage alloc] initWithContentsOfFile:fp]; 

您還可以使用+imageNamed:,從你的主束抓取的圖像。

NSImage* image = [NSImage imageNamed:@"topImage.png"]; 
+0

謝謝!究竟是什麼問題 – Brian 2009-11-02 04:33:05

4

initWithContentsOfFile:是一個實例方法,但是您將該消息發送到NSImage類。你需要將它發送給一個實例 - 特別是一個新分配的實例。

這就是alloc進來的地方。它是一種分配實例的類方法,然後您立即發送init…消息(如Darren所示)。

當你完成它時,不要忘記釋放實例。我通常在啓動它後立即自動釋放實例;那麼,Cocoa會在適當的時候爲我釋放實例。有關更多信息,請參閱Memory Management Programming Guide for Cocoa