问题引出
前段时间,一个朋友的项目出了bug,他找了很久也没有发现原因,迫于无奈向我求助。问题是这样的:他的项目中明明已经拖入了图片等资源,但在项目运行后却无法加载和显示。当时因为忙,匆匆的就帮他解决完问题(PS:还混到了一顿午饭)。但是后面我也不小心犯了这个错误,忽然发现这确实是大家容易忽视的一些重要细节,所以这里来系统的阐述一下。
问题原因
资源拷贝选项如大家所见每次把图片等资源拖入到工程的时候总是会弹出一个选项,一般的开发者都会很少关注这个选项,直接会点击Finish跳过,但是往往这些忽略的细节会造就很多莫名的BUG。
PS:学习方法
其实这种问题很难百度谷歌到,这种问题的解决方式也很简单,有时候自己新建一个项目试一试就知道了
下面我就来试验并阐述一下这些选项的含义:
1.Copy items if needed
:
试验:新建一个项目,将一张桌面图片拖入项目,首先我们尝试不勾选这个选项,然后在storyboard中拖入imageView,设置imageView显示的图片是它,然后我尝试性的移动原来在桌面上的原资源图片到另一个目录或者删除图片的时候,项目中imageView设置的图片就显示问号了,而且项目中图片名字也变成红色,此时应该就是找不到图片了。
结论:如字面意思所言,就是如果需要就拷贝这些选项。如果不勾选的话使用的就是原资源位置的图片,根本就没有存在于项目当中,所以原资源图片消失,项目中就找不到图片了。此时你肯定不相信了,那么你可以拖入图片到项目中的时候不勾选这个选项,然后去你项目文件夹中找找,看是否能找到这张图片。
2.Create groups与Create folder references
试验:看到folder这个单词就应该想到文件夹,把刚刚桌面上的图片放入一个文件夹内,如果勾选Create groups的时候我们发现,在main bundle中去查看拖入的图片,图片直接在main bundle中的根目录,如果是勾选Create folder references的话,根目录是这个文件夹,进入文件夹后才显示这张图片。
结论:拖入文件夹的时候,勾选folder后会在安装程序之后会在打包程序里面真正创建文件夹,如果勾选的是groups,看上去是文件夹,但是打包安装到用户手机上并不是真正文件夹。那么拖入单独的图片时候会是神马情况呢?拖入单独的一个图片这两个选项是没有任何区别的。原因嘛,你可以自己试试,自己琢磨出新知识真的是一件很快乐的事情。
3.Add to target
试验:和刚刚验证Copy items if needed一样,当拖入的时候不勾选这个选项的时候,storyboard和项目中都显示有图片了,但是运行后却神马图片都没有显示。
结论:勾选这个选项的含义就是是否需要将资源打包到main bundle中,如果不勾选就不会打包进去,程序安装之后资源就不会在手机或者模拟器上面。当然,你也可以到模拟器的main bundle中看看是不是打包进去了。
建议
资源拷贝选项建议如果你还没有看懂这篇文章讲的神马,那现在我给出我的建议,如果没有什么特殊需要,那么开发中一般像我上图那样勾选各个选项就行,就能避免很多莫名其妙的错误。而且拖入资源的时候记住仔细看一看是否选项选择正确,因为上一次不知道什么原因,Xcode自动给我选到其他选项了,所以让我找了很久很久。
联系方式
如果你喜欢这篇文章,可以继续关注我,微博:极客汤米,欢迎交流。
网友评论