NSBundle的不同文件夹中的两个图像的相同名称

时间:2014-04-26 11:31:03

标签: ios nsbundle

我在NSBundle的不同文件夹中有两个图像具有相同的名称。它显然会发出警告:

  

警告:输出文件的多个构建命令/Users/xxxxxXXXXXXXxxxxxxx.app/image.png

我知道NSBundle =>在NSBundle中,所有文件夹都是 “groups” ,而非实际目录,这些组中的文件仍位于捆绑包的根目录中。

在我的应用程序中,我需要在不同的“文件夹”中使用相同名称的图像来简化我的任务。

所以我的问题是:

  • 有没有办法在没有任何警告的情况下将两张图片保存在NSBundle的不同文件夹中?还有我如何获取它?

  • 如果我将应用上传到应用商店时没有出现此问题的任何问题?我的意思是,我的应用程序会被Apple拒绝吗?

2 个答案:

答案 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];