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:が呼び出された場合、別の方法で動作する場合(物事をキューに入れるか、. の別のサブクラスを再実行します) 。batchOperationsAFOperation
この設計の優れた点は、一部の呼び出しを「バッチ モード」で実行するために、既存のコードを保持し、ブロック内にラップするだけで済むことです。
私の質問は、メソッドがブロックから呼び出されていることをどのように検出できますか? 私はrequestWithMethod:path:parameters:それを検出する必要があり、そして:
batchOperationsブロックから呼び出された場合は、別の方法で動作します。batchOperationsブロックから呼び出されない場合は、単に呼び出しますsuper。
に 2 つのメソッドを追加するだけで簡単になることはわかっていますがSPRRailsClient、こちらの方が見栄えが良いと思いました。
また、UIViewアニメーションブロック内から呼び出されたときにアニメーションの一部のメソッドが異なる方法で動作し、NSManangedObjectContextおそらくperformBlock:同様のことを行っているため、可能だと思います。