在当前项目中我有许多文件夹,包含子文件夹,其中包含图像:01.png,02.png。
Folder1中/ FolderA / f1.png 文件夹1 / 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。
答案 0 :(得分:25)
要在.app包中创建子文件夹,您应该选中“为任何添加的文件夹创建文件夹引用”选项,而不是默认的“为任何添加的文件夹递归创建组”选项 现在在XCode中,导入的文件夹显示为蓝色而不是黄色。构建并继续,您应该在.app文件中看到文件夹。
答案 1 :(得分:0)
首先,您在Xcode中创建的文件夹只是组织结构,在文件系统级别上没有任何对应物。换句话说,除了“Classes”文件夹之外的所有文件夹在文件系统级别都变得扁平化。因此,即使您将图像文件放在xcode中的以下位置,它仍将存在于文件系统的顶层:f1 / f2 / f3 / f4 / f5 / image.png。因此,在pathForResource方法中,不应包含inDirectory参数。
至于第二个问题,mac osx无法识别区分大小写的文件名。因此,f1和F1等同于mac osx并将引用相同的文件。您可以通过在终端会话中执行以下两个命令来轻松查看:
touch f
touch F
你会注意到此后只存在一个文件:即f。如果您反转2个命令,仍然会得到一个文件,但它名为F.
答案 2 :(得分:0)
ennuikiller是对的。我认为您可以通过Finder在子文件夹中整理图像,然后通过右键单击图像并选择“获取信息”选项刷新XCode中的图像位置。然后设置新目录。
干杯。
答案 3 :(得分:0)
只是想补充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"];
答案 4 :(得分:0)
我已经按照你的回答了但它接缝所有文件都平放在根目录上。如果我使用下面的代码来获取完整路径
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