簡體   English   中英

iPhone SDK:主包內的子文件夾

[英]iPhone SDK: subFolders inside the main bundle

在當前項目中,我有許多文件夾,包含子文件夾,其中包含圖像:01.png,02.png。

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

當我編譯應用程序時,我查看了.app並注意到所有圖像都放在頂層,沒有子文件夾。

因此在嘗試加載圖像時這顯然不起作用:

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

但更奇怪的是,當加載圖像“f1”時,圖像實際加載“F1”

UIImageView * imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@“f1.png”]];

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

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

TIA。

要在.app包中創建子文件夾,您應該選中“為任何添加的文件夾創建文件夾引用”選項,而不是默認的“為任何添加的文件夾遞歸創建組”選項。現在在XCode中,導入的文件夾顯示為藍色而不是黃色。 構建並繼續,您應該在.app文件中看到文件夾。

只是想添加到Mugunth的答案,跟進試圖使用的原始問題的一部分:

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

...訪問使用文件夾引用添加的文件。 上面的'pathForResouce'調用將在模擬器上運行,但不適用於實際的iPhone(將返回nil),因為它們似乎不能識別方法的'inDirectory'部分中的子文件夾。 但是,他們確實在'pathForResource'部分識別它們。 因此,重新描述上述內容使其適用於iPhone的方式是:

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

我已經按照你的回答但接縫所有文件都平放在根目錄上。 如果我使用下面的代碼來獲取完整路徑

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

我得到的結果是:/ Users / iosif / Library / Application Support / iPhone Simulator / 6.1 / Applications / 33FB4F79-999C-4455-A092-906A75226CDB / Arithmetics.app / About.png

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

至於第二個問題,mac osx不識別區分大小寫的文件名。 因此,f1和F1等同於mac osx並將引用相同的文件。 您可以通過在終端會話中執行以下2個命令來輕松查看:

touch f
touch F

你會注意到在此之后只存在一個文件:即f。 如果你反轉2個命令,你仍然會得到一個文件,但它被命名為F.

ennuikiller是對的。 我認為您可以通過Finder在子文件夾中整理圖像,然后通過右鍵單擊圖像並選擇“獲取信息”選項刷新XCode中的圖像位置。 然后設置新目錄。

干杯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM