我有多個視圖,它們可以製作相同的NSURLRequest/NSURLConnection request
。理想情況下,爲了獲得一些代碼重用,我想有一些「代理」,它負責創建/執行(異步)請求/連接,設置所有委託方法等所有基礎工作。 ,所以我不必在每個視圖中複製所有這些NSURLConnection
委託方法處理程序。首先,這種設計方法是否合理?其次,我會如何去做這樣的事情?NSURLConnection用於異步Web服務調用的NSURLRequest代理
對於一個小的背景信息,我試圖得到它「工作」,但是,它似乎不是異步執行。我創建具有用於不同的web服務調用的實例方法(和也含有NSURLConnection
委託方法)一個Proxy.h /米文件:
@interface Proxy : NSObject {
NSMutableData *responseData;
id<WSResponseProtocol> delegate;
}
- (void)searchForSomethingAsync:(NSString *)searchString delegate:(id<WSResponseProtocol>)delegateObj;
@property (nonatomic, retain) NSMutableData *responseData;
@property (assign) id<WSResponseProtocol> delegate;
@end
的WSResponseProtocol被定義爲這樣:
@protocol WSResponseProtocol <NSObject>
@optional
- (void)responseData:(NSData *)data;
- (void)didFailWithError:(NSError *)error;
@end
爲了使用它,視圖控制器只需要符合WSResponseProtocol
協議就可以捕獲響應。使Web服務調用如下所示:
Proxy *p = [[Proxy alloc] init];
[p searchForSomethingAsync:searchText delegate:self];
[p release];
我可以提供更多的代碼,但其餘的可以假設。在打電話之前,我「開始動畫」一個UIActivityIndicatorView
微調器。但是這個微調者永遠不會旋轉。如果我直接將NSURLConnection委託方法直接放在視圖控制器中,那麼微調器就會旋轉。所以,這讓我認爲我的實現不是異步執行的。這裏有什麼想法/想法?
啊 - 非常好!我明白你的意思 - 你的解決方案將消除對協議的需求。更直截了當!感謝那!我認爲,儘管我開始熱衷於Kendal提出的解決方案,也就是說,將同步的NSURLConnections包裝在NSOperation中並引發隊列。該解決方案可能是創建異步Web服務調用框架問題的更直接的解決方案,儘管我的方法+您的洞察力仍然可行。 – tbehunin 2009-12-29 18:10:33
恢復我的評論早些時候。這種方法是我在NSOperation中使用vs同步NSURLConnections的方法。 NSURLConnection已經提供了我所需要的線程,而不需要把它放到NSOperation中。另外,閱讀更多博客之後,同步NSURLConnections +身份驗證不會提供與異步調用一樣多的「鉤子」。 – tbehunin 2010-01-01 17:23:12
何處\如何receivedData數據聲明。該文件只是說它在其他地方聲明,但沒有提供如何做到這一點的信息。 – 2012-10-03 17:17:09