当每次把图片等资源拖入到工程的时候总是会弹出一个选项,一般的开发者都会很少关注这个选项,直接会点击Finish跳过,但是往往这些忽略的细节会造就很多莫名的BUG。例如,将桌面上的一张图片拖入项目中后,会弹出下面这个对话框:

ios 拷贝相册到沙盒 iphone照片拷贝项目_xcode

下面对每个选项的含义一一进行解释:

1. Copy items if needed

测试:新建一个项目,将一张桌面图片拖入项目,首先我们尝试不勾选这个选项,然后在storyboard中拖入imageView,设置imageView显示的图片是它,然后尝试性的移动原来在桌面上的原资源图片到另一个目录或者删除图片的时候,项目中imageView设置的图片就显示问号了,而且项目中图片名字也变成红色,此时应该就是找不到图片了。

结论:如字面意思所言,就是如果需要就拷贝这些选项。如果不勾选的话使用的就是原资源位置的图片,根本就没有存在于项目当中,所以原资源图片消失,项目中就找不到图片了。

2. Added folders(Create groups 或者 Create folder references)

测试:看到folder这个单词就应该想到文件夹,把刚刚桌面上的图片放入一个文件夹内,如果勾选Create groups的时候我们发现,在main bundle中去查看拖入的图片,图片直接在main bundle中的根目录,如果是勾选Create folder references的话,根目录是这个文件夹,进入文件夹后才显示这张图片。

结论:使用Create groups ,为任何新增加的文件夹创建组,我们在项目中完全可以手动添加一个 groups(右键点击选择New Group),但是手动添加的 groups 实际上并不会存在于项目的目录中,你会发现被添加进 groups 中的文件仍在位于它原来所在的位置,但是从外部引入进来的 groups 并不会如此,正如我们刚才那样。groups 一旦被创建或添加,都是以黄色文件夹的形式存在的,当你想要使用文件夹中的某个类的头文件时,你可以直接添加它的引用,例如:#include xxx.h,因为groups下的cpp文件是会被编译的。

使用Create folder references方法只是将文件单纯的创建了引用,是以蓝色文件夹存在的,这些文件不会被编译,所以在使用的时候需要加入其路径,比如在我们想要使用上图中的myScripts文件夹下面有某个头文件,则需要按照下面的方法添加声明:#include myScripts/xxx.h,否则编译器就会告诉你找不到xxx.h文件。

这就是项目中黄色文件夹与蓝色文件夹的区别以及使用方法

3. Add to targets

当你选择了这个选项时,如果你想要引入的文件不在你的项目文件的目录下,Xcode则会自动将这个文件复制一份拷贝到你的项目的目录下。如果你不选择,并且这个文件也并不在你的项目目录下,那么这个文件仍然可以被使用,但是一旦你将项目拷贝到了别的地方时,这个文件就会找不到了。因为这个文件在你的电脑中,而不在你的项目中。