從項(xiàng)目開(kāi)始到現(xiàn)在一直在跟蹤一個(gè)問(wèn)題,就是在AFN請(qǐng)求失敗時(shí),ios這邊拿不到服務(wù)器放回的失敗數(shù)據(jù)只能拿都服務(wù)器標(biāo)準(zhǔn)的請(qǐng)求失敗的狀態(tài)碼.而我項(xiàng)目中好多處都要對(duì)請(qǐng)求失敗時(shí)那到服務(wù)器數(shù)據(jù)
上圖是正常請(qǐng)求失敗時(shí),打印的失敗信息,無(wú)論你打印error的任何屬性,或task的任何屬性都拿不到服務(wù)器寫(xiě)死的中文的一個(gè)數(shù)據(jù).
也問(wèn)過(guò)很多朋友,他們公司的做法是只要是HTTP 請(qǐng)求,只要URL和填的參數(shù)的key是正確的,無(wú)任key的值是否正確,他都能請(qǐng)求成功,在AFN成功的block里拿到數(shù)據(jù),從而提示用戶.
但是我的項(xiàng)目用AFN只要請(qǐng)求失敗都走失敗的那個(gè)block,而在這block里根本就拿不到服務(wù)器數(shù)據(jù).
我剛開(kāi)始的做法是,通過(guò)失敗狀態(tài)碼,寫(xiě)死數(shù)據(jù),當(dāng)被老大批了,客戶那邊也投訴, 因?yàn)橛行顟B(tài)碼根本就有兩種甚至多種失敗解釋,你用一個(gè)狀態(tài)碼來(lái)寫(xiě)死,也只能是寫(xiě)死一種情況.而且只要對(duì)HTTP 錯(cuò)誤碼有研究的大神都知道,HTTP錯(cuò)誤碼有幾千種,你能都寫(xiě)的完么.
后來(lái)我嘗試用蘋(píng)果原生的session請(qǐng)求來(lái)寫(xiě),發(fā)現(xiàn)能拿到請(qǐng)求失敗時(shí)服務(wù)器數(shù)據(jù),但是我HTTP好多處都用了,要改的話好麻煩,而且還要考慮性能問(wèn)題,線程問(wèn)題,以及別的問(wèn)題. 到這里我就考慮到AFN底層是基于NSURLSession來(lái)寫(xiě)的一個(gè)框架, 這底層應(yīng)該能拿到請(qǐng)求失敗時(shí)的數(shù)據(jù)啊.我就想我能不能通過(guò)設(shè)置什么參數(shù),或重寫(xiě)什么方法就可以拿到數(shù)據(jù)呢.
后來(lái),被我整好了,下面是代碼截圖
最后就能拿到請(qǐng)求失敗body里的數(shù)據(jù)了