我正在使用AFNetworking'sAFHTTPClient类与 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.
我知道只添加两个额外的方法会更简单SPRRailsClient,但我认为这看起来更好。
另外,我认为这是可能的,因为某些UIView动画方法在从动画块中调用时会以不同的方式表现,并且NSManangedObjectContext'sperformBlock:可能也在做类似的事情。