iOS開發 AFNetworking 3.0使用遇到的問題補充
1.很多初學者,在每處用到網路請求的地方會直接拿afn執行個體去請求,從而帶來了後續難以維護代碼的問題
[[AFHTTPSessionManager manager] POST:nil parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) { } failure:^(NSURLSessionDataTask *task, NSError *error) { }];
思考:如果afn不更新了,後續出現重大bug適配問題,從而導致每處用到afn的地方都要修改,請問怎麼辦?
答案:呵呵,只能一個個修改了!有人會說,怎麼可能不更新,很多人用著呢,怕什麼。那假設其他第三方也同樣出現類型的問題呢?所以是不是應該有方法或某種思想去解決呢?
解決方案:寫個網路基類HRHttpBase
,提供兩個方法:GET 與 POST,外面請求時,直接調用這兩個方法,萬一afn出了問題,只要修改這兩個方法即可,從而減輕後續維護成本!這種做法同樣適用於其他的第三方庫, 這也是一種開發思想。
HRHttpBase.h
HRHttpBase.m
假設業務複雜的話,如登入,涉及到第三方登入之類的,有比較多的網路請求,可以專門抽一個網路請求類要處理:
HRhttpLogin.h
HRhttpLogin.m
2.用到CocoaPods,但更改了afn代碼問題
這是缺少text/html解析格式,請求網路時,只要添加上就行了,很多人在網上找到設定的地方(如)。但他忘了,項目用CocoaPods
管理第三方庫的,如果項目上線之前,同事更新了CocoaPods
那麼之前寫的代碼就沒了!
解決辦法:通過AFHTTPSessionManager執行個體找到AFHTTPResponseSerializer 對象,然後看有沒提供對應的方法或屬性可設定該格式。
像類似的網路請求header
和user-agent
都應該在自己的代碼裡設定!
3.返回字串而並非是json或xml格式,怎麼解析?
開發中確實是存在奇葩的需求,還有可能返回一堆html
格式的String
,要截取Sting
裡的某個key
。對於處理不了的格式,afn
有可能error
回調。
用AFHTTPSessionManager,我沒找到未解析的字元(知道的朋友可以告訴我,謝謝)。最後還是用了AFHTTPRequestOperationManager
operation.responseString
即為未格式化的字元
Paste_Image.png