先说说我先这篇文章的目的,一,总结项目中遇到的问题,避免以后再犯同样的错误.二,是记录自己的踩过得坑.
在项目中要实现APP换肤的功能,当这个任务分给我的时候内心还是有点小激动的,心想终于有机会大展身手了.项目的leader告诉我先把逻辑想清楚,然后再动手写代码.我呢也就采纳了leader的建议.开始画逻辑图, 说一下大致的流程.启动和后天进入的时候会去请求换肤接口,返回的内容有换肤开关,皮肤版本号,皮肤包资源URL.根据换肤开关判断是否去下载皮肤包资源,同时保存当前版本号以供新皮肤吧版本号比较.下载好皮肤包资源开始解压缩然后发通知展示新皮肤.这是换肤的大致流程.
然后开始上手写代码,在这过程中很顺利根据之前的逻辑进行的开发.功能开发完成后测试联调的时候发现了问题.解压皮肤包失败后使用默认皮肤,但是没有情况版本号.所以这就造成下次不去重新请求.这时候就发现开发前的逻辑确实不够严谨,想问题他简单没有考虑全面.功能实现后给leader看,由于他对我也不怎么放心.看了我的代码后,就发现了问题.就是根据路径取图片的时候,没有考虑到路径不存在图片为空的情况.这就造成了严重的问题,如果路径下面没有图片整个app主题将出现大片空白.最后做了个判空处理.如果为空,就使用默认皮肤.
总结:在处理数据对象的时候要进行判空处理.
皮肤请求后的数据之前没有做保存,后来发现皮肤接口每30分钟请求一次来更新.项目中使用的是coredata设置过期时间.过期后重新请求.设置DEBUG模式过期时间为0,这样是为了方便测试.非DEBUG模式有30分钟的过期时长.在打包给测试的时候,使用了第二个选项Save for Ad Hoc Deployment .测试的时候请求皮肤开关数据有30分钟的过期时长.然后就郁闷了也不知道是那儿的问题.最后把build configuration修改为debug模式.然后使用Save for development deployment 选项打包可以了.
总结:在有debug模式判断的时候打包要打debug包.