從一開始我就不知道這個class到底是用來做什麼的,光看code也不太懂他到底在幹什麼,以下是一點簡單的研讀心得,主要內容來自於NSHipster和官方文件:
NSError不是一個抽象類別,而是可以直接使用的類別。App可能會去創建NSError的子類別,覆寫localizedDescription以提供更佳的localized error strings。
NSError 是 toll-free bridged 到它的 Core Foundation 上的對應 CFErrorRef。但CFErrorRef本身沒有什麼更好的理由值得讓你深入探討它(by NSHipster)。
其實光看前面的敘述就應該要會使用了,如果還是不太會用,就參考這一篇吧。
前言
NSError物件封裝了豐富的錯誤資訊,不僅僅只有錯誤代碼或是錯誤字串,你可以附加任意的user info dictionary到該物件上,以提供更詳細的訊息。NSError不是一個抽象類別,而是可以直接使用的類別。App可能會去創建NSError的子類別,覆寫localizedDescription以提供更佳的localized error strings。
NSError 是 toll-free bridged 到它的 Core Foundation 上的對應 CFErrorRef。但CFErrorRef本身沒有什麼更好的理由值得讓你深入探討它(by NSHipster)。
NSError的結構
一個NSError有三個主要的特性:- domain:發生錯誤的領域,比方說是在傳送request時發生錯誤,code跟domain有關
- code:Domain-specific code,表示在該Domain中的錯誤碼
- useInfo:為dic結構,可以封裝錯誤訊息,其中包含的key請參閱官方文件
遇到NSError的情況
你會需要處理NSError的情況有兩種:- Consuming:
- 呼叫的方法中最後的參數是NSError:在你執行完該方法,若遇到錯誤,系統會把相關的資訊封裝到NSError參數內給你處理。這類型的方法通常會回傳Bool值或是nil,使用if判斷如果是false或是nil,可以讀取NSError以得知詳細的錯誤訊息。
- 用於completionHandler的block內:類似上述的情況。
- Producing:
- 自定義Domain和code:定義需要的Domain和Domain-specific code。
其實光看前面的敘述就應該要會使用了,如果還是不太會用,就參考這一篇吧。
留言
張貼留言