最近的需求又對(duì)調(diào)用系統(tǒng)相冊(cè)進(jìn)行了新的改進(jìn),不單單是要求選中照片還要對(duì)選中的照片標(biāo)上序號(hào)拨拓,刪除某張照片肴颊,選中照片的序號(hào)也要刷新,保證正確的順序渣磷。還有調(diào)用系統(tǒng)相機(jī)進(jìn)行拍照的照片也要進(jìn)行排序婿着,要求動(dòng)態(tài)變動(dòng)順序
。相冊(cè)和相機(jī)作為整個(gè)App數(shù)據(jù)的主要來(lái)源醋界,在多處被調(diào)用竟宋。因此那個(gè)坑啊,真是一言難盡。今天對(duì)此次調(diào)用相冊(cè)和相機(jī)遇到的坑進(jìn)行一下總結(jié)形纺,長(zhǎng)個(gè)心眼!
1丘侠、計(jì)算照片的大小
計(jì)算照片大小 時(shí)發(fā)現(xiàn)的坑,在iOS7上通過(guò)系統(tǒng)方法計(jì)算出來(lái)的照片大小逐样,是兩位小數(shù)的蜗字,而iOS9上是16位小數(shù)的。iOS8上小數(shù)位數(shù)可能介于兩者之間官研。因此iOS9上計(jì)算照片總大小的時(shí)候秽澳,居然出現(xiàn)了負(fù)值,單點(diǎn)調(diào)試發(fā)現(xiàn)了問(wèn)題戏羽,小數(shù)位數(shù)的問(wèn)題担神,于是進(jìn)行小數(shù)格式化,只保留三位小數(shù)進(jìn)行計(jì)算始花,結(jié)果就正確了妄讯,不再出現(xiàn)因?yàn)樾?shù)誤差引起的負(fù)值現(xiàn)象。
2酷宵、按鈕的狀態(tài)
在計(jì)算文件大小的時(shí)候亥贸,發(fā)現(xiàn)了另外一個(gè)坑。復(fù)制粘貼的時(shí)候浇垦,由于粗心炕置,忘記修改按鈕的狀態(tài)了。但是在iOS9上,不管是增加還是減少照片朴摊,文件的總大小還是照常動(dòng)態(tài)顯示的默垄,并無(wú)異樣。然而在iOS7上卻只計(jì)算一次甚纲,就一直不再變化口锭,于是debug,打印數(shù)據(jù)介杆。我的天吶鹃操,原來(lái)是按鈕的狀態(tài)沒(méi)有對(duì)上。選中按鈕時(shí)春哨,我把狀態(tài)寫(xiě)成了UIControlStateNormal
荆隘,恍然大悟,于是趕緊把狀態(tài)改成UIControlStateSelected
,照片的總大小實(shí)時(shí)顯示了赴背。由此也發(fā)現(xiàn)了臭胜,iOS7上新選照片只是狀態(tài)變了,序號(hào)不顯示的原因癞尚,也是按鈕的狀態(tài)不對(duì)耸三,及時(shí)進(jìn)行了修正,這下照片的序號(hào)能正常顯示了浇揩。
3仪壮、數(shù)據(jù)刪除
反選照片時(shí),照片狀態(tài)要修改為初始狀態(tài)胳徽,從選中數(shù)組中移除积锅。由于反選后的照片不能從選中的數(shù)組中移除,造成了選過(guò)一次的照片不能再修改狀態(tài)养盗,點(diǎn)擊無(wú)任何反應(yīng)缚陷,于是又是debug,一看打印數(shù)據(jù)往核,著實(shí)驚訝啊箫爷。沒(méi)有刪除當(dāng)前的反選照片對(duì)象前數(shù)組中是5個(gè)照片對(duì)象,執(zhí)行刪除以后聂儒,數(shù)組中還是5個(gè)照片對(duì)象虎锚。我勒個(gè)去,壓根沒(méi)有刪除啊衩婚。于是把刪除對(duì)象的方法由removeObject
改成了removeObjectAtIndex
,反選的對(duì)象終于刪除了窜护,這下照片的狀態(tài)和序號(hào)一切都正常了。算是大功告成了非春,這個(gè)艱難的bug終于解決了柱徙。如釋重負(fù)盎和馈!
4护侮、新拍照照片的顯示
拍照的問(wèn)題藏研,這個(gè)問(wèn)題是在以上的3個(gè)問(wèn)題之前解決的,也是各種問(wèn)大神概行,各種嘗試。有大神告訴我時(shí)可能是數(shù)據(jù)刷新的問(wèn)題弧岳,更新UI必須在主線程進(jìn)行凳忙,于是在獲取新拍照照片以后在主線程更新了UI,發(fā)現(xiàn)不管用禽炬。再三思量之后涧卵,把獲取新拍照照片的方法放到了viewWillAppear
,結(jié)果是第一次拍照不能及時(shí)獲取到照片,標(biāo)上序號(hào)腹尖,再之后的就可以了柳恐。我一個(gè)做安全的點(diǎn)了幾次,看了看現(xiàn)象热幔,告訴我有可能是初始化的問(wèn)題乐设。于是第二天到公司的時(shí)候又進(jìn)行了嘗試。最后再三思量绎巨,新拍照的照片出現(xiàn)時(shí)再去獲取標(biāo)序號(hào)不就OK了嗎近尚,于是把獲取新拍照照片標(biāo)序號(hào)的方法放到了viewDidAppear
中去,這下問(wèn)題終于解決了场勤,杠杠的戈锻!