[iOS] NSError淺談

從一開始我就不知道這個class到底是用來做什麼的,光看code也不太懂他到底在幹什麼,以下是一點簡單的研讀心得,主要內容來自於NSHipster官方文件

前言

NSError物件封裝了豐富的錯誤資訊,不僅僅只有錯誤代碼或是錯誤字串,你可以附加任意的user info dictionary到該物件上,以提供更詳細的訊息。

 NSError不是一個抽象類別,而是可以直接使用的類別。App可能會去創建NSError的子類別,覆寫localizedDescription以提供更佳的localized error strings。


NSError 是 toll-free bridged 到它的 Core Foundation 上的對應 CFErrorRef。但CFErrorRef本身沒有什麼更好的理由值得讓你深入探討它(by NSHipster)。

NSError的結構

一個NSError有三個主要的特性:
  1. domain:發生錯誤的領域,比方說是在傳送request時發生錯誤,code跟domain有關
  2. code:Domain-specific code,表示在該Domain中的錯誤碼
  3. useInfo:為dic結構,可以封裝錯誤訊息,其中包含的key請參閱官方文件

遇到NSError的情況

你會需要處理NSError的情況有兩種:
  • Consuming:
    • 呼叫的方法中最後的參數是NSError:在你執行完該方法,若遇到錯誤,系統會把相關的資訊封裝到NSError參數內給你處理。這類型的方法通常會回傳Bool值或是nil,使用if判斷如果是false或是nil,可以讀取NSError以得知詳細的錯誤訊息。
    • 用於completionHandler的block內:類似上述的情況。
  • Producing:
    • 自定義Domain和code:定義需要的Domain和Domain-specific code。
NSError的使用

其實光看前面的敘述就應該要會使用了,如果還是不太會用,就參考這一篇吧。

留言