我正在使用ASIHTTPRequest與服務器異步通信。它工作得很好,但我在不同的控制器中執行請求,現在重複的方法在所有這些控制器中。在單個類中抽象代碼(請求)的最佳方式是什麼,因此我可以輕鬆地重新使用代碼,這樣我就可以使控制器更簡單。我可以把它放在單身人士(或在應用程序委託),但我不認爲這是一個好方法。或者可以使用委託回調爲其創建自己的協議。ASIHTTPRequest代碼設計
一個良好的設計方法,任何意見將是有益的。謝謝。
我正在使用ASIHTTPRequest與服務器異步通信。它工作得很好,但我在不同的控制器中執行請求,現在重複的方法在所有這些控制器中。在單個類中抽象代碼(請求)的最佳方式是什麼,因此我可以輕鬆地重新使用代碼,這樣我就可以使控制器更簡單。我可以把它放在單身人士(或在應用程序委託),但我不認爲這是一個好方法。或者可以使用委託回調爲其創建自己的協議。ASIHTTPRequest代碼設計
一個良好的設計方法,任何意見將是有益的。謝謝。
我使用的奔科普塞的ASIHTTPRequest
非常沉重的Web服務客戶端,我希望在接下來的幾個星期才能完成的子類。這是一個偉大的項目,他的工作爲我節省了大量的時間和精力。
我有一個ASINetworkQueue
在應用程序委託成立。隊列發送-go
消息,以便它可以接收請求。我將我的子類請求添加到此隊列中。每個請求都會被處理併發布其通知,並且我的視圖控制器會相應地處理響應數據。
我所做的是子類ASIHTTPRequest
和:
-init
方法(或-initWithParams:
方法,根據請求)-requestFailed:
和-requestCompleted:
處理來自回來HTTP錯誤信息web服務-requestCompleted:
方法中的錯誤處理的NSNotification
通知作爲視圖控制器被推上並彈出導航堆棧,我添加和刪除不同的註冊。一些視圖控制器只需要偵聽特定的子類請求類型。
收聽NSNotification
允許我發出UIAlertView
對話框,讓用戶知道出了什麼問題,或者在請求產生成功的HTTP錯誤時處理請求響應數據(例如將結果饋送到Core Data存儲區)。
請求是否成功或失敗,我記得-release
請求時,我用它做。
我寫了一個單獨的類來處理這個問題。
static TCHttpRequest *_sharedHttpRequest = nil;
+ (id)sharedRequest
{
@synchronized(self){
if (_sharedHttpRequest == nil) {
_sharedHttpRequest = [[self alloc] init];
}
}
return _sharedHttpRequest;
}
- (NSDictionary *)loginWithUserName:(NSString *)user password:(NSString *)pwd
{
NSURL *url = [NSURL URLWithString:@"/login" relativeToURL:_url];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setCachePolicy:ASICacheForSessionDurationCacheStoragePolicy];
[request setTimeOutSeconds:HTTP_REQ_TIMEOUT];
[request addPostValue:user forKey:@"username"];
[request addPostValue:pwd forKey:@"password"];
request.delegate = self.delegate;
[_common_queue addOperation:request];
}
我看不出類方法和實例方法是如何相關的?類方法實例化TCHttpRequest並保證只有一個實例。 loginWithUserName實例方法實例化一個ASIFormDataRequest並將其添加到通用隊列。我在這裏看不到任何重用?
您是否必須處理服務器端的訪問令牌?在我的情況下,我必須發出3-4個請求,我不確定他們是否會成功或失敗。如果它們失敗了,我將不得不要求一個新的訪問令牌,然後重新運行失敗的請求。另外我失敗了,沒有理由去運行其他人,直到我得到新的令牌。如果可用,只需重新運行等待隊列中的那些。 – Zsolt