我在Objective-C项目中使用 RestKit ,需要为我的服务调用指定超时大约10秒。
阅读后,看起来RestKit看起来不支持这个,所以我的计划是:
这是我的问题......
如果定时器方法触发,我需要取消请求并手动调用下面的方法。我不是百分百肯定如何实现这一点。
my other question中有一些上下文,显示了我的项目中RestKit是如何实现的,以及它在这种情况下的作用。
非常感谢您提供有关此问题的任何帮助。
- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error {
NSLog(@"Hit error: %@", error);
}
答案 0 :(得分:7)
在RestKit 0.20.x版中,您可以使用
取消预定的请求[[RKObjectManager sharedManager]
cancelAllObjectRequestOperationsWithMethod:RKRequestMethodAny
matchingPathPattern:YOUR_PATTERN];
答案 1 :(得分:5)
您可以使用cancelRequestsWithDelegate:selector来实现所描述的工作流程。
- (void)cancelAfterTimeout {
[[[[RKObjectManager sharedManager] client] requestQueue] cancelRequestsWithDelegate:self];
NSError *myError = [[[NSError alloc] initWithDomain:NSPOSIXErrorDomain
code:12345 userInfo:nil] autorelease];
//feel free to customize the error code, domain and add userInfo when needed.
[self handleRestKitError:myError];
}
但是,调用该委托错误处理程序可能会很棘手,但您可以通过创建新的,单独的错误处理程序来解决此问题:
- (void)handleRestKitError:(NSError*)error {
//do something with the error
}
并修改didFailWithError:
方法的正文:
- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error {
[self handleRestKitError:error]
}
答案 2 :(得分:1)
你总能得到:
[[RKObjectManager sharedManager].operationQueue cancelAllOperations];
您的每个请求都将以错误 -999 结束(取消操作)。您可以检查 error.code 并执行适当的操作。