我在NSBundle
的不同文件夹中有两个图像具有相同的名称。它显然会发出警告:
警告:输出文件的多个构建命令/Users/xxxxxXXXXXXXxxxxxxx.app/image.png
我知道NSBundle
=>在NSBundle
中,所有文件夹都是 “groups” ,而非实际目录,这些组中的文件仍位于捆绑包的根目录中。
在我的应用程序中,我需要在不同的“文件夹”中使用相同名称的图像来简化我的任务。
所以我的问题是:
有没有办法在没有任何警告的情况下将两张图片保存在NSBundle
的不同文件夹中?还有我如何获取它?
如果我将应用上传到应用商店时没有出现此问题的任何问题?我的意思是,我的应用程序会被Apple拒绝吗?
答案 0 :(得分:3)
这是完成此任务的一个非常好的链接,请检查一下 Xcode Groups vs. Folder References清楚地描述了它
<强>组强>
底层项目文件(project.pbxproj)的大小和复杂性可能会显着增长,尤其是对于多个目标。每个新目标都必须复制所有引用。您还必须记住为每个文件设置正确的目标成员资格。此外,由于更大,更复杂的项目文件,SCM合并冲突的可能性更大。
组可能与磁盘上的文件夹层次结构完全不相似。您可以在Finder中拥有Xcode项目中甚至不存在的项目文件夹,反之亦然。由于不匹配,定位文件会让人感到困惑
如果移动文件或将其重命名为Xcode,则引用会中断并且文件变为红色。文件管理变得非常痛苦。
文件夹参考
文件夹引用的好处是:
Xcode仅存储对该文件夹的引用。它的所有文件和子文件夹都会自动添加到项目中。这使项目文件更小更简单,合并冲突的可能性更小。
如果您在文件系统中重命名,删除或移动文件,Xcode会自动更新文件夹引用以反映更改。文件管理因此容易得多。 由于项目中的文件夹层次结构与磁盘上的层次结构相匹配,因此它们不会随着时间的推移而发生分歧并导致混淆。
您不必担心名称冲突,因为目录结构保留在产品包中。两个文件可以共享相同的名称,只要它们位于不同的目录中即可。
答案 1 :(得分:2)
你有文件夹:图片。通过将其重命名为:images.bundle将其更改为bundle。将其拖到项目中:
你有:
images.bundle --- folder1 --- image1.png
--- folder2 --- image1.png
--- folder3 --- image1.png
您获得了一系列文件夹,在获得所需的文件夹后,您可以获得所需的图像:
NSString *path = [[NSBundle mainBundle] bundlePath];
path = [path stringByAppendingString:@"/images.bundle"];
NSError *error;
NSArray * directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];