国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

ios開(kāi)發(fā)中的容錯(cuò)處理示例詳解

2019-10-21 18:41:09
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

后臺(tái)服務(wù)器返回給客戶端的值有時(shí)會(huì)是null,有時(shí)會(huì)是"<null>",直接賦值并進(jìn)行后續(xù)操作有時(shí)會(huì)導(dǎo)致崩潰。 之前的處理方式都是盡量讓后臺(tái)服務(wù)器返回?cái)?shù)據(jù)時(shí)不返回null或者是"<null>",但是他們還是時(shí)不時(shí)返回這些數(shù)據(jù),所以app時(shí)不時(shí)就會(huì)出現(xiàn)閃退現(xiàn)象。一出現(xiàn)這種問(wèn)題,調(diào)試后發(fā)現(xiàn)是他們返回null或者是"null"的數(shù)據(jù)類型,因?yàn)槭蔷€上的問(wèn)題,所以讓他們直接在后臺(tái)將出現(xiàn)問(wèn)題的字段進(jìn)行處理就好了。久而久之,發(fā)現(xiàn)這種處理方式并不可取,覺(jué)得應(yīng)該在app端應(yīng)該做些容錯(cuò)處理,因此就有了這篇文章,接下來(lái)和我看一下有哪些容錯(cuò)處理的方式。

具體如下:

寫個(gè)工具類,判斷處理每個(gè)字段是不是[NSNull null]對(duì)象,或者判斷是不是isEqual:@"<null>";

用AFNetworking作為網(wǎng)絡(luò)請(qǐng)求的話,可以設(shè)置以下變量為YES;

// AFURLResponseSerialization.h/** Whether to remove keys with `NSNull` values from response JSON. Defaults to `NO`. */@property (nonatomic, assign) BOOL removesKeysWithNullValues;

大牛寫了個(gè)NSNull分類:源碼地址本地下載)用法是直接將該類拖到項(xiàng)目中即可,NullSafe思路:在運(yùn)行時(shí)操作,把空值置換為nil,而向nil指針發(fā)送消息是不會(huì)崩潰的。

我這里主要說(shuō)的是第三種解決方案,我將該項(xiàng)目從github上下載到本地,然后拖到項(xiàng)目中后,本以為這樣就可以解決問(wèn)題了,因?yàn)樽约簩懥藗€(gè)測(cè)試demo,給UILabel賦值null,沒(méi)有拖進(jìn)去該庫(kù)時(shí)直接崩潰了,將該庫(kù)拖進(jìn)項(xiàng)目后發(fā)現(xiàn)項(xiàng)目正常運(yùn)行。所以就認(rèn)為可以一勞永逸了,但是在項(xiàng)目中測(cè)試時(shí),發(fā)現(xiàn)仍然出現(xiàn)崩潰的現(xiàn)象,打斷點(diǎn)調(diào)試后,發(fā)現(xiàn)后臺(tái)傳回的數(shù)據(jù)是"<null>",而NSNull分類中只是判斷了數(shù)據(jù)是否是NSNull類型,如果是NSNull類型,就將其設(shè)置為nil,然而后臺(tái)傳回的數(shù)據(jù)是"<null>",它并不是NSNull類型,所以仍然會(huì)崩潰,所以我在該項(xiàng)目的基礎(chǔ)上,加了個(gè)是否等于<null>的判斷,如果條件成立,則將其設(shè)置為nil,這樣就可以避免后臺(tái)傳回我們不想要的數(shù)據(jù)而導(dǎo)致崩潰的問(wèn)題了,修改后的代碼如下:

- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector{ //look up method signature NSMethodSignature *signature = [super methodSignatureForSelector:selector]; if ([signature isEqual:@"<null>"]) {  signature = nil;  }else if ([signature isKindOfClass:[NSNull class]]) {  signature = nil;  }else if (!signature) {  //check implementation cache first NSString *selectorString = NSStringFromSelector(selector); signature = signatureCache[selectorString]; if (!signature) {  @synchronized([NSNull class])  {  //check again, in case it was resolved while we were waitimg  signature = signatureCache[selectorString];  if (!signature)  {   //not supported by NSNull, search other classes   if (signatureCache == nil)   {   if ([NSThread isMainThread])   {    cacheSignatures();   }   else   {    dispatch_sync(dispatch_get_main_queue(), ^{    cacheSignatures();    });   }   }      //find implementation   for (Class someClass in classList)   {   if ([someClass instancesRespondToSelector:selector])   {    signature = [someClass instanceMethodSignatureForSelector:selector];    break;   }   }      //cache for next time   signatureCache[selectorString] = signature ?: [NSNull null];  }  } } } return signature;}

當(dāng)然也可以去github下載,源碼地址 (本地下載),但是需要加上下圖所示的代碼:

ios開(kāi)發(fā),容錯(cuò)處理,ios,容錯(cuò),容錯(cuò)機(jī)制

需要添加的代碼截圖

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到IOS開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 青河县| 扶风县| 赤壁市| 昭平县| 福泉市| 运城市| 明水县| 白水县| 中江县| 罗平县| 樟树市| 靖西县| 泰宁县| 晋宁县| 开封县| 乐陵市| 安义县| 高要市| 淮安市| 宜宾市| 谢通门县| 永安市| 台北县| 桂阳县| 陆河县| 绍兴市| 巫山县| 吴忠市| 庐江县| 贵阳市| 饶阳县| 定兴县| 新绛县| 达孜县| 衡东县| 惠东县| 恩施市| 三都| 西藏| 莆田市| 蓝山县|