2012-12-26 32 views
1

爲了向用戶顯示信息,我的iOS應用程序必須調用許多不同的Web服務。這就是爲什麼我創建了一個Connection Helper類,它使用NSURLConnection來調用我的服務器功能。這工作正常,它簡化了我的其餘視圖,除了錯誤處理。在Connection Helper類中處理錯誤的好習慣

大多數情況下,如果我的幫手遇到HTTP 500錯誤,我希望它顯示一條警報,而不顯示我的視圖中的實現。但是對於某些HTTP 500來說,顯示警報是無關緊要的,我希望來自視圖的不同行爲。

現在,我在Connection Helper中只有很多if子句來處理不同的情況。我不喜歡這個解決方案,因爲它不整齊。你有沒有想到我可以創建一個整潔的結構來歸檔我想要做的事情?

示例: 調用具有錯誤ID的Web服務getItem將返回一個HTTP 500,並向用戶顯示錯誤是一種很好的行爲。但是調用帶有錯誤ID的deleteItem也會返回一個HTTP 500,但我不想將此錯誤顯示給我的用戶,因爲它不相關。

+1

我不能確定你的連接助手的整體結構,但你可以有兩種方法,比如像makeConnectionWithBlock:和makeConnectionWithBlock:failureBlock :,它的第一個將有你的默認處理,但允許自定義處理程序塊的傳球爲第二種情況。 – shawnwall

+0

我認爲這可能是一個整潔的想法!但是傳遞一個處理程序是否工作正常還是它有隱藏的缺點? – NLemay

+1

不是。查看https://github.com/AFNetworking/AFNetworking,獲取基於塊的網絡操作的傑出示例。 – shawnwall

回答

0

肖恩沃爾的解決方案可能是解決這個問題的好方法。但我發現了另一個我更舒服的人。

我的連接助手類聲明瞭一個委託ConnectionHelperDelegate。在這個類中,我創建了一個可選功能:

- (BOOL) connectionDidFailWithHttp500:(NSString *) errorMessage; 

然後,如果我委託具有這個功能,我把它叫做:

if([self.delegationListener respondsToSelector:@selector(connectionDidFailWithHttp500:)]){...} 

如果委託返回true,這意味着它會處理剩下的工作。如果它返回false,它會通知ConnectionHelper爲它做。