2013-10-15 120 views
0

我正在構建SDK。處理API錯誤與網絡錯誤

基本上,開發人員會傳入一個錯誤處理函數,該函數將在調用API時發生錯誤。

對於API錯誤(或由API返回的錯誤),我創建了一個具有域ExampleAPPDomain的NSError。 ApI錯誤具有不同的userInfo結構(例如,我向用戶信息添加了「類別」鍵)。

但有時錯誤是一個nsurlconnection錯誤...我也將該錯誤傳遞給錯誤處理程序。

所以我稱:

errorHandler(error) 

有時傳入的ErrorHandler函數NSError誤差是API錯誤,有時它是一個NSURLConnection的類型的錯誤(如網絡錯誤)。

我該如何最好地處理這些錯誤? 例如,在錯誤處理程序代碼中,開發人員必須檢查錯誤的域以查看它是什麼類型(NSURLDomain vs ExampleAPPDomain)並相應地處理它。這是兩種錯誤之間不同的唯一方法。

什麼是處理APP錯誤與NSUrlConnection連接錯誤的標準方式是什麼?

回答

0

爲什麼不總是給他們ExampleAppDomain作爲錯誤的域。這樣就沒有混淆。大多數標準庫都是這樣做的 - 封裝所有錯誤。從本質上講,當你得到錯誤時,你需要在NSError中包含你的域名。您可以檢查響應的NSURLConnectionDelegate的可接受的statusCode和內容。另外,不要自己處理所有的網絡代碼,爲什麼不使用像AFNetworking這樣的標準庫呢?

這是一個代碼,但您必須檢查基於XML/JSON的可接受代碼/內容。以下是AFNetworking的摘錄。

NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; 
[userInfo setValue:self.responseString forKey:NSLocalizedRecoverySuggestionErrorKey]; 
[userInfo setValue:[self.request URL] forKey:NSURLErrorFailingURLErrorKey]; 
[userInfo setValue:self.request forKey:ExampleAppDomainFailingURLRequestErrorKey]; 
[userInfo setValue:self.response forKey:ExampleAppDomainOperationFailingURLResponseErrorKey]; 


NSError *error = [[NSError alloc] initWithDomain:ExampleAppDomain code:NSURLErrorBadServerResponse userInfo:userInfo]; 

檢查NSURLError.h文件以獲取更多錯誤信息。

+0

我應該如何將錯誤從NSUrlDomain轉換爲這種新格式?我只是複製本地化的描述和錯誤代碼?或者我應該在創建的新的ExampleAppDomain錯誤的userinfo中將nsurldomain錯誤存儲爲underlying_error參數... –

+0

reedited the answer! –