背景:在上一個(gè)項(xiàng)目版本中一直使用AFNetworking2.0這個(gè)主流的網(wǎng)絡(luò)請(qǐng)求庫东且,AFHTTPRequestOperationManager從來未讓人操心過。在新版迭代中本讥,突發(fā)奇想的去升級(jí)AFNetworking3.0珊泳,使用了AFHTTPSessionManger之后讓我操碎了心,如何操碎了新拷沸,讓我慢慢道來色查。
在使用AFNetworking v3.0之前,當(dāng)然是要去了解一下AFNetworking v3.0的具體變化(當(dāng)然撞芍,v2.0版本我也不是很熟秧了,就知道AFHTTPRequestOperationManager而已)。簡(jiǎn)要的總結(jié)說是AFHTTPRequestOperationManager這個(gè)類已經(jīng)被棄用了序无,將使用AFHTTPSessionManger來取而代之验毡,具體原因可以查看一下AFNetworking 3.0遷移指南。就聽大神的說帝嗡,都換成了AFHTTPSessionManger晶通,API也更新了一遍。用虛擬機(jī)跑了一遍主要的用到的API哟玷,主要是以下三個(gè):
*[AFHTTPSessionManger GET: parameters: progress: success: failure:]?
*[AFHTTPSessionManger POST: parameters: progress: success: failure:]
*[AFHTTPSessionManger POST: parameters: constructingBodyWithBlock: progress: success: failure:]?
在iOS8.0以上版本是正常運(yùn)行,即使在上傳圖片的時(shí)候出現(xiàn)response Code=-1016 "Request failed: unacceptable content-type: text/html"的問題也是用
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]
或者是
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer]
輕松解決狮辽。
只是在iOS7.1的版本,使用前兩個(gè)沒有什么問題巢寡,倒是上傳功能喉脖,出了response Code=-1011 "Request failed: length required (411)這個(gè)問題讓我糾結(jié)了一遍。后來查了一下AFNetworking的issue集抑月,還真遇到一個(gè)树叽,試了幾次終于可以使用了,下面貼下代碼:
PS:本文章有個(gè)地方是會(huì)引發(fā)內(nèi)存泄漏的谦絮,請(qǐng)查看這篇文章:AFNetworking3.x容易出現(xiàn)內(nèi)存泄露的地方
貼上問題解答位置:https://github.com/AFNetworking/AFNetworking/issues/1398