【W(wǎng)arming】:AFNetworking 奇葩問(wèn)題旨在針對(duì)奇葩問(wèn)題提出奇葩的解法玉雾,部分驗(yàn)證并在實(shí)際中用到,但不保證有隱性問(wèn)題。
大家應(yīng)該都遇到過(guò)這樣一個(gè)問(wèn)題宦棺,在app中某一個(gè)請(qǐng)求是需要發(fā)生在登錄之后的,那這個(gè)時(shí)候有兩種思路黔帕,1代咸、全局保存并判斷用戶的登錄狀態(tài)然后繼續(xù)請(qǐng)求;2成黄、先請(qǐng)求然后根據(jù)后臺(tái)返回的狀態(tài)判斷是否需要進(jìn)行登錄操作呐芥,如果需要登錄的時(shí)候則默默后臺(tái)登錄或者前臺(tái)彈出登陸頁(yè)面,登錄之后也有兩種處理方式奋岁,a思瘟、讓用戶手動(dòng)刷新頁(yè)面,重新請(qǐng)求數(shù)據(jù)闻伶,b滨攻、自動(dòng)繼續(xù)請(qǐng)求當(dāng)前頁(yè)面的數(shù)據(jù),本文主要針對(duì)的就是第二種需要用戶登錄之后繼續(xù)請(qǐng)求數(shù)據(jù)的情況
第一種蓝翰,后臺(tái)一般保存session或者token都是有時(shí)限性的光绕,比如30分鐘或者1天等等,這個(gè)時(shí)候需要每一次登錄維持一個(gè)計(jì)時(shí)器在本地霎箍,或者每一次請(qǐng)求的時(shí)候根據(jù)當(dāng)前請(qǐng)求的時(shí)間減去上次的時(shí)間奇钞,如果大于限定值,則進(jìn)行重登錄操作漂坏。我沒(méi)做過(guò)測(cè)試景埃,感覺(jué)有點(diǎn)麻煩。
第二種顶别,對(duì)請(qǐng)求之后的結(jié)果進(jìn)行處理谷徙,然后通過(guò)block回調(diào),再處理原接口驯绎,代碼如下:
+ (void)requestWithMethod:(NSString*)method
urlString:(NSString*)urlString
parameters:(id)paramters
result:(void(^)(NSDictionary * responseObject, NSDictionary * errorDic))result{
[[NetworkClient client] requestWithMethod:method
urlString:urlString
parameters:paramters
success:^(NSURLSessionDataTask *task, id responseObject) {
NSString * rcode = responseObject[@"rcode"];
if (rcode.integerValue == 0) { // 處理成功的情況
result(responseObject[@"data"], nil);
}else if (rcode.integerValue == SPErrorTokenAvalid){ // 處理登錄失效的情況
[SPUserOperationManager neeLoginWithBlock:^{
[self requestWithMethod:method
urlString:urlString
parameters:paramters
result:result];
}];
}else{
result(nil, responseObject);
[SPErrorManager showErrorMessageWithErrorDic:responseObject];
}
} fail:^(NSURLSessionDataTask *task, NSError *error) {
DLog(@"error==>%@",error.localizedDescription);
[SPErrorManager showErrorMessageWithContent:error.localizedDescription];
}];
}
至此完慧,大功告成!趕快去試一下吧剩失!