私は同じを作る複数のビューを持っていますNSURLRequest/NSURLConnection request
。理想的には、コードを再利用するために、(非同期の)要求/接続の作成/実行、すべてのデリゲートメソッドの設定などの基本的な作業をすべて実行するある種の「プロキシ」が必要です。 、したがってNSURLConnection
、各ビューでこれらのデリゲートメソッドハンドラーをすべてコピーする必要はありません。まず第一に、この設計アプローチは合理的ですか?第二に、私はどのようにそのようなことをするのですか?
少し背景情報として、これを試して「機能」させましたが、非同期で実行されているようには見えません。NSURLConnection
さまざまなWebサービス呼び出しのインスタンスメソッドを含む(およびデリゲートメソッドも含む)Proxy.h/mファイルを作成しました。
@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
これを使用するには、View ControllerはWSResponseProtocol
、応答をキャッチするために、プロトコルに準拠する必要があります。Webサービスの呼び出しは、次のように行われます。
Proxy *p = [[Proxy alloc] init];
[p searchForSomethingAsync:searchText delegate:self];
[p release];
より多くのコードを提供できますが、残りは想定できます。UIActivityIndicatorView
電話をかける前に、スピナーを「startAnimating」します。しかし、スピナーは決して回転しません。NSURLConnectionデリゲートメソッドをViewControllerに直接配置すると、スピナーが回転します。したがって、私の実装は非同期で実行されていないと思います。ここに何か考え/アイデアはありますか?