如何在RestKit中过早取消请求并调用'didFailWithError'

时间:2011-12-01 20:29:56

标签: objective-c xcode restkit

我在Objective-C项目中使用 RestKit ,需要为我的服务调用指定超时大约10秒。

阅读后,看起来RestKit看起来不支持这个,所以我的计划是:

  • 发送请求时启动计时器
  • 加载数据时,请禁用计时器

这是我的问题......

如果定时器方法触发,我需要取消请求并手动调用下面的方法。我不是百分百肯定如何实现这一点。

my other question中有一些上下文,显示了我的项目中RestKit是如何实现的,以及它在这种情况下的作用。

非常感谢您提供有关此问题的任何帮助。

- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error { 
     NSLog(@"Hit error: %@", error); 
}

3 个答案:

答案 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 并执行适当的操作。