ios開發中的容錯處理示例詳解

2022-09-21 14:21:08 字數 1529 閱讀 1218

前言

後台伺服器返回給客戶端的值有時會是null,有時會是"",直接賦值並進行後續操作有時會導致崩潰。 之前的處理方式都是盡量讓後台伺服器返回資料時不返回null或者是"",但是他們還是時不時返回這些資料,所以app時不時就會出現閃退現象。一出現這種問題,除錯後發現是他們返回null或者是"null"的資料型別,因為是線上的問題,所以讓他們直接在後台將出現問題的字段進行處理就好了。久而久之,發現這種處理方式並不可取,覺得應該在app端應該做些容錯處理,因此就有了這篇文章,接下來和我看一下有哪些容錯處理的方式。

具體如下:

寫個工具類,判斷處理每個字段是不是[nsnull null]物件,或者判斷是不是isequal:@"";

用afnetworking作為網路請求的程式設計客棧話,可以設定以下變數為yes;

// a程式設計客棧furlresponseserialization.h

/** whether to remove keys with `nsnull` values from response json. defaults to `no`.

*/@property (nonatomic, assign) bool removeskeyswithnullvalues;

大牛寫了個nsnull分類:原始碼位址 (本地**)用法是直接將該類拖到專案中即可,nullsafe思路:在執行時操作,把空值置換為nil,而向nil指標傳送訊息是不會崩潰的。

我這裡主要說的是第三種解決方案,我將該專案從github上**到本地,然後拖到專案中後,本以為這樣就可以解決問題了,因為自己寫了個測試demo,給uilabel賦值null,沒有拖進去該庫時直接崩潰了,將該庫拖進專案後發現專案正常執行。所以就認為可以一勞永逸了,但是在專案中測試時,發現仍然出現崩潰的現象,打斷點除錯後,發現後台傳回的資料是"",而nsnull分類中只是判斷了資料是否是nsnull型別,如果是nsnull型別,就將其設定為nil,然而後台傳回的資料是"",它並不是nsnull型別,所以仍然會崩潰,所以我在該項目的基礎上,加了個是否等於的判斷,如果條件成立,則將其設定為nil,這樣就可以避免後台傳回我們不想要的資料而導致崩潰的問題了,修改後的**如下:

- (nsmethodsignature *)methodsignatureforselector:(sel)selector

else if ([signature iskindofclass:[nsnull class]]) else if (!signature)

else);}

}//find implementation程式設計客棧

for (class someclass in classlist)

}//cache for next time

signaturecache[selectorstring] = signature ?: [nsnull null];

} }

} }return signature;

}當然也可以去github**,原始碼位址 (本地**),但是需要加上下圖所示的**:

需要新增的**截圖

總結本文標題: ios開發中的容錯處理示例詳解

本文位址:

ORACLE 過程中容錯處理

1 基本結構 begin 語句 exception 例外處理 when when others end 2 常用預定義例外 exception when cursor already open then ora 06511 sqlcode 6511 游標已經開啟 when dup val on in...

C語言與使用者互動的容錯處理

計算機語言是計算機能夠識別和接受的語言,要使計算機按自己的意圖去執行或者工作,必須使用計算機所能接受,能理解和執行的指令指揮計算機工作。大部分的低階語言能實現的的功能,c語言都能實現,最開始接觸c語言覺得它會像vb那樣使用,但慢慢的發現c語言的運算子和資料結構更加豐富,語法的限制不太嚴格,但正是這樣...

C語言與使用者互動的容錯處理

計算機語言是計算機能夠識別和接受的語言,要使計算機按自己的意圖去執行或者工作,必須使用計算機所能接受,能理解和執行的指令指揮計算機工作。大部分的低階語言能實現的的功能,c語言都能實現,最開始接觸c語言覺得它會像vb那樣使用,但慢慢的發現c語言的運算子和資料結構更加豐富,語法的限制不太嚴格,但正是這樣...