REST サーバーのクライアントとして機能する iOS アプリを作成しています。これまでのところ、すべてのリクエストを非常に簡単な方法で処理してきました。電話をかける必要があるときはいつでも、次のようにします。
[ApiRequestManager sendApiCall:@"dogs/getSomeDog"
withParams:@{ @"dog_name": @"freddo" }
callback:^(NSDictionary *result) {
// do something with the response data already unserialized
// (comes as JSON) by the ApiRequestManager static method.
}];
NSMutableURLRequest
アプリが複雑になるにつれて、次のように、実際にサブクラス化して応答用の独自のプロトコルを作成すると、はるかにクリーンになる (そしてテストの労力が減る) ことに気付きます。
@protocol ApiRequestDelegate <NSObject>
- (void)apiRequest:(ApiRequest *)request didSucceedWithResult:(NSDictionary *)result;
@optional
- (void)apiRequest:(ApiRequest *)request didFailWithError:(NSError *)error;
@end
これにより、リクエストの作成とそのレスポンスの処理などのコードを分離できます。委任パターンを使用して古い呼び出しを置き換え始めたときは、すべてうまくいきましたが、! その後、あちこちで次のようなことをしていることに気付きました。
// in class Dog
+ (void)putLeashOnDogs:(NSArray *)dogs {
NSString *ids = // collect IDs from dogs
[ApiRequestManager sendApiCall:@"dogs/putLeash"
withParams:@{ @"dog_ids": ids }
callback:^(NSDictionary *result) {
// something
}];
}
私の質問は、「このクラスは X プロトコルメソッドの静的バージョンを持つことになる」と何とか言って、委任オブジェクト (ApiRequest インスタンス) を作成する静的メソッドで言うことができますmyRequest.delegate = self
か? これを解決できない場合、またはこれを解決するためのより良い/よりクリーンな/より正しい方法がある場合、どのようなオプションがありますか?