AFNetworking
のクラスを使用AFHTTPClient
して、Rails バックエンドと通信しています。
API
オブジェクトを作成するとき、サーバー上でバッチ API を使用していくつかの呼び出しを実行したいと考えています (ご参考までに、 batch_apiを使用しています)。
うまく拡張するためAFHTTPClient
に、次のような API を考えていました。
[[[SPRRailsClient] sharedInstance] batchOperations:^ {
NSMutableURLRequest *request = [[SPRRailsAPIClient sharedClient]
requestWithMethod:@"GET"
path:myPath
parameters:parameters];
AFHTTPRequestOperation *operation = [[SPRRailsAPIClient sharedClient]
HTTPRequestOperationWithRequest:request
success:nil
failure:nil];
}];
SPRRailsClient
トリックは、(私のAFHTTPClient
サブクラス)をオーバーライドすることです.ブロック内でrequestWithMethod:path:parameters:
とHTTPRequestOperationWithMethod:success:failure:
が呼び出された場合、別の方法で動作する場合(物事をキューに入れるか、. の別のサブクラスを再実行します) 。batchOperations
AFOperation
この設計の優れた点は、一部の呼び出しを「バッチ モード」で実行するために、既存のコードを保持し、ブロック内にラップするだけで済むことです。
私の質問は、メソッドがブロックから呼び出されていることをどのように検出できますか? 私はrequestWithMethod:path:parameters:
それを検出する必要があり、そして:
batchOperations
ブロックから呼び出された場合は、別の方法で動作します。batchOperations
ブロックから呼び出されない場合は、単に呼び出しますsuper
。
に 2 つのメソッドを追加するだけで簡単になることはわかっていますがSPRRailsClient
、こちらの方が見栄えが良いと思いました。
また、UIView
アニメーションブロック内から呼び出されたときにアニメーションの一部のメソッドが異なる方法で動作し、NSManangedObjectContext
おそらくperformBlock:
同様のことを行っているため、可能だと思います。