2010-03-07 72 views
10

在當前項目中我有一些文件夾,其中包含子文件夾,其中包含圖像:01.png,02.png。iPhone SDK:主包中的子文件夾

Folder1中/ FolderA/f1.png Folder1中/ FolderB中/ F1.png

當我編譯應用程序,我看着的。應用程序內,發現所有的圖像放置在頂層,用沒有子文件夾。

所以很明顯,當試圖加載圖像這不起作用:

的NSString *文件路徑= [[一個NSBundle mainBundle] pathForResource:@ 「F1」 ofType:@ 「PNG」 inDirectory:@「Folder1中/ FolderA「];

但更奇怪的是,加載圖像 「F1」 時,圖像實際上載入 「F1」

的UIImageView *的ImageView = [[UIImageView的頁頭] initWithImage:[UIImage的imageNamed:@ 「f1.png」] ;

任何人都有如何解決這個問題的想法?

是否有編譯選項來創建應用程序包中的文件夾?

TIA。

+0

有什麼問題?這聽起來像你的圖片加載得很好。 – kubi 2010-03-07 23:36:29

+0

問題是image f1.png不是F1.png。 – user279778 2010-03-07 23:43:44

+0

它顯示錯誤的圖像。 – user279778 2010-03-07 23:44:00

回答

25

要創建.app包中的子文件夾,您應該選中「爲所有添加的文件夾創建文件夾引用」選項,而不是默認的「爲所有添加的文件夾遞歸創建組」 現在,在XCode中,藍色而不是黃色。建立和去,你應該看到你的.app文件中的文件夾。

+0

完美!我做的錯誤是將文件夾結構拖放到資源文件夾中,而不是執行選項單擊,選擇「添加 - >現有文件」,然後選擇單選按鈕「爲所有添加的文件夾創建文件夾引用」。然後該文件夾是藍色的。 – user279778 2010-03-08 10:42:16

+0

如何引用上述創建的子文件夾中的文件? 'pathForResource:ofType:inDirectory:'不適合我。 – pkyeck 2011-12-13 16:38:34

+2

好吧,自己想出來 - 也許有人對此感興趣:'NSString * folderPath = [NSString stringWithFormat:@「%@/myfolder」,[[NSBundle mainBundle] bundlePath]];'' – pkyeck 2011-12-13 16:58:32

0

首先,您在Xcode中創建的文件夾只是組織結構,在文件系統級別沒有任何對應物。換句話說,除「Classes」文件夾以外的所有文件夾在文件系統級別變得平坦。因此,即使將圖像文件放在xcode中的以下位置,它仍然會存在於文件系統的頂層:f1/f2/f3/f4/f5/image.png。因此,在pathForResource方法中,您不應該包含inDirectory參數。

至於第二個問題,mac osx不識別區分大小寫的文件名。因此,f1和F1相當於mac osx,並且會引用同一個文件。您可以輕鬆地通過在終端會話執行以下兩個命令看到這一點:

touch f 
touch F 

你會發現,在這之後僅1文件存在:即F。如果您反轉2個命令,仍然會得到一個文件,但它的名稱爲F.

+0

圖像在系統中的實際文件夾中,而不僅僅在XCode中。但Xcode不會複製文件夾,只是png文件。 – user279778 2010-03-07 23:42:42

+0

似乎正在發生的是名稱「f1.png」的圖像被圖像「F1.png」破壞。 – user279778 2010-03-07 23:48:16

+0

是的,這是真的關於大小寫不敏感。 – user279778 2010-03-07 23:58:04

0

ennuikiller是正確的。我認爲你可以通過Finder在子文件夾中整理你的圖像,然後通過右鍵單擊圖像並選擇「獲取信息」選項來刷新XCode中的圖像位置。然後設置新的目錄。

乾杯。

+0

當然,但它仍然不會在.app內建立文件夾。 – user279778 2010-03-08 00:04:00

0

只想添加到Mugunth的回答,跟進這是試圖用原來的問題的一部分:使用文件夾引用添加

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"f1" ofType:@"png" inDirectory:@"Folder1/FolderA"]; 

...訪問文件。上面的'pathForResouce'調用將在模擬器上工作,但不在實際的iPhone上(無返回),因爲他們似乎無法識別該方法'inDirectory'部分中的子文件夾。不過,他們確實在'pathForResource'部分中識別了它們。所以上面的改寫,使其適用於iPhone手機的方式是:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"FolderA/f1" ofType:@"png" inDirectory:@"Folder1"]; 
0

我已經按照你的答案,但它煤層中的所有文件都存儲平放在根目錄下。如果我使用下面的代碼來獲取完整路徑

CFBundleRef mainBundle = CFBundleGetMainBundle(); 
CFURLRef url = CFBundleCopyResourceURL(mainBundle, CFSTR("About"), CFSTR("png"), NULL); 
UInt8 filePath[PATH_MAX]; 
CFURLGetFileSystemRepresentation(url, true, filePath, sizeof(filePath)); 

我得到的結果:/用戶/ iosif /庫/應用程序支持/ iPhone模擬器/ 6.1 /應用/ 33FB4F79-999C-4455-A092-906A75226CDB /Arithmetics.app/About.png

相關問題