2012-07-29 98 views
3

我在我的項目中創建了一個新文件夾,其中複製了一個圖像(稱爲「io.jpg」)。
我也檢查了構建階段 - >複製束資源和文件在那裏。
所以我試圖讓這個圖片的路徑:從NSBundle獲取無路徑

NSBundle* bundle=[NSBundle mainBundle]; 
NSString* path=[bundle pathForResource: @"io" ofType: @"jpg"]; 
NSLog(@"%@",path); 

但它打印(空),我也試過這樣:

NSBundle* bundle=[NSBundle mainBundle]; 
NSString* path=[bundle pathForImageResource: @"io"]; 
NSLog(@"%@",path); 

但它仍然打印(空)。
有什麼問題?

+0

你看過的實際建成的產品,以確保文件被正確複製? – jtbandes 2012-07-29 02:13:45

+0

是的,該文件在應用程序目錄中。 – 2012-07-29 11:23:05

+0

可能重複的[資源路徑不工作Xcode](http://stackoverflow.com/questions/11447010/resourcepath-not-working-xcode) – trojanfoe 2012-07-30 06:58:43

回答

3

我的猜測,鑑於你說你在你的Xcode項目中創建了一個新的文件夾是你創建了一個藍色文件夾引用,並且你的圖像資源位於你的包的子目錄中。

我敢打賭,這不是一個錯誤與NSBundle,考慮到這個類對基礎框架有多老和嚴重。

嘗試和使用更具體的實例方法

- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension inDirectory:(NSString *)subpath 

其中subpath文件夾參考我猜你創建的名稱來訪問你的資源。

3

如果您請求的資源不存在於輸出中(或不存在於應該出現的位置),您將得到一個零路徑。這是我見過的唯一原因。

忘記證明它應該存在,只是檢查輸出以確保它確實存在。

(也請記住,文件名是區分大小寫的。)

爲了澄清,你應該在~/Library/Developer/Xcode/DerviedData/Project-{GUID}/Build/Products尋找在輸出束。您的圖片將會丟失。

+0

圖像在那裏,我也嘗試打印包的路徑,並進入它的目錄,我注意到在內容 - >資源下有圖像「io.jpg」。 – 2012-07-29 12:20:54

+1

它應該位於YourApplication.app的頂層,而不是在Resources子目錄中。 – 2012-08-01 03:32:38

+0

@StevenFisher我正在使用Xcode 6 - 我在哪裏可以看到資源文件?它們不在產品或Debug-iphonesimulator中。 – moonman239 2015-07-28 18:10:32

0

幾周前我有這樣的問題。事實證明,我只是沒有勾選一個框。這是我問我時得到的答案。

「在Xcode項目瀏覽器中選擇文件(在左邊),並確保您的目標在文件檢查器中的」目標成員「下(右側)被選中 - 同時再次檢查拼寫的文件名 - 蒙迪「

+0

所以這個問題是這個問題的重複? – trojanfoe 2012-07-30 06:57:55

+0

是的。如果忘記選中該框,該文件實際上不在應用程序的包中。 – 2012-07-30 07:35:46

+0

那個盒子已經被切割了,這不是問題。 – 2012-07-30 11:20:28

0

所有這一切是一種過度衝擊如果你只是想獲得一個圖像。比方說,你已經包括在你的應用程序包bundleImage.PNG ..某處,不知何故......

NSImage *image = [NSImage imageNamed:@"bundleImage"];

會,肯定..找到它...如果它的存在......無法獲取更加簡單,對不對?

如果 - 在起飛的機會 - 這是一個稍微複雜一點的情況,如圖像是一個可裝載包或框架 - 你可以使用類似於以下(上NSImage中一類分類)代碼也將返回資源。

+ (id) imageInFrameworkWithFileName:(NSString *) fileName { 
    NSBundle *b = [NSBundle bundleForClass: [DummyClass class]]; 
    return [self imageWithFileName: fileName inBundle: b]; 
} 

說實話,我真的不明白的概念,不然怎麼這麼「僞類」工程..但這是什麼樣子

@interface DummyClass : NSObject 
@end 
@implementation DummyClass 
@end 
+0

假設'DummyClass'也在包/框架中作爲您正在尋找的圖像資源。 – Jessedc 2012-08-01 02:10:05

+0

@Jessedc不,我只在'@interface NSImage(MyCategory)'之前包含'@interface DummyClass',然後我可以在任何繼承'#import''類的地方使用它。 – 2012-08-01 02:14:37

0

嘗試從您的應用程序中刪除圖像,然後再次添加它。並在運行之前清理您的版本。請參閱是否有幫助。否則,請給出項目導航器的截圖,以顯示圖像添加的位置。它必須是在你的Application.app的最高級別。它是任何文件夾/子文件夾內的任何地方。

5

轉至:目標 - >「構建階段」 - >「複製束資源」然後在此處添加該特定文件。

清理項目並運行。有用。 :)