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

Nic*_*ick 10 xcode objective-c restkit

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

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

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

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

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

我的另一个问题中有一些上下文,展示了如何在我的项目中实现RestKit以及它在这种情况下正在做什么.

非常感谢您提供的任何帮助.

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

Kyl*_*egg 7

在RestKit版本0.20.x中,您可以使用取消预定的请求

[[RKObjectManager sharedManager]
    cancelAllObjectRequestOperationsWithMethod:RKRequestMethodAny
                           matchingPathPattern:YOUR_PATTERN];
Run Code Online (Sandbox Code Playgroud)


mja*_*mja 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];
}
Run Code Online (Sandbox Code Playgroud)

但是,调用该委托错误处理程序可能会很棘手,但您可以通过创建新的,单独的错误处理程序来解决此问题:

- (void)handleRestKitError:(NSError*)error {
    //do something with the error
}
Run Code Online (Sandbox Code Playgroud)

并修改didFailWithError:方法的主体:

- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error { 
     [self handleRestKitError:error] 
}
Run Code Online (Sandbox Code Playgroud)