??????? 先說說我先這篇文章的目的,一,總結(jié)項(xiàng)目中遇到的問題,避免以后再犯同樣的錯(cuò)誤.二,是記錄自己的踩過得坑.
????????? 在項(xiàng)目中要實(shí)現(xiàn)APP換膚的功能,當(dāng)這個(gè)任務(wù)分給我的時(shí)候內(nèi)心還是有點(diǎn)小激動(dòng)的,心想終于有機(jī)會(huì)大展身手了.項(xiàng)目的leader告訴我先把邏輯想清楚,然后再動(dòng)手寫代碼.我呢也就采納了leader的建議.開始畫邏輯圖, 說一下大致的流程.啟動(dòng)和后天進(jìn)入的時(shí)候會(huì)去請(qǐng)求換膚接口,返回的內(nèi)容有換膚開關(guān),皮膚版本號(hào),皮膚包資源URL.根據(jù)換膚開關(guān)判斷是否去下載皮膚包資源,同時(shí)保存當(dāng)前版本號(hào)以供新皮膚吧版本號(hào)比較.下載好皮膚包資源開始解壓縮然后發(fā)通知展示新皮膚.這是換膚的大致流程.
?????????? 然后開始上手寫代碼,在這過程中很順利根據(jù)之前的邏輯進(jìn)行的開發(fā).功能開發(fā)完成后測(cè)試聯(lián)調(diào)的時(shí)候發(fā)現(xiàn)了問題.解壓皮膚包失敗后使用默認(rèn)皮膚,但是沒有情況版本號(hào).所以這就造成下次不去重新請(qǐng)求.這時(shí)候就發(fā)現(xiàn)開發(fā)前的邏輯確實(shí)不夠嚴(yán)謹(jǐn),想問題他簡(jiǎn)單沒有考慮全面.功能實(shí)現(xiàn)后給leader看,由于他對(duì)我也不怎么放心.看了我的代碼后,就發(fā)現(xiàn)了問題.就是根據(jù)路徑取圖片的時(shí)候,沒有考慮到路徑不存在圖片為空的情況.這就造成了嚴(yán)重的問題,如果路徑下面沒有圖片整個(gè)app主題將出現(xiàn)大片空白.最后做了個(gè)判空處理.如果為空,就使用默認(rèn)皮膚.
???????????? 總結(jié):在處理數(shù)據(jù)對(duì)象的時(shí)候要進(jìn)行判空處理.
?????????
??????????? 皮膚請(qǐng)求后的數(shù)據(jù)之前沒有做保存,后來發(fā)現(xiàn)皮膚接口每30分鐘請(qǐng)求一次來更新.項(xiàng)目中使用的是coredata設(shè)置過期時(shí)間.過期后重新請(qǐng)求.設(shè)置DEBUG模式過期時(shí)間為0,這樣是為了方便測(cè)試.非DEBUG模式有30分鐘的過期時(shí)長(zhǎng).在打包給測(cè)試的時(shí)候,使用了第二個(gè)選項(xiàng)Save for Ad Hoc Deployment .測(cè)試的時(shí)候請(qǐng)求皮膚開關(guān)數(shù)據(jù)有30分鐘的過期時(shí)長(zhǎng).然后就郁悶了也不知道是那兒的問題.最后把build configuration修改為debug模式.然后使用Save for development deployment 選項(xiàng)打包可以了.
? ? ? ? ? ?? 總結(jié):在有debug模式判斷的時(shí)候打包要打debug包. ??????????