Restkit:重试失败的请求

时间:2013-01-14 16:23:36

标签: ios web-services delegates restkit

使用Restkit,我想重试失败的请求。我试图通过委托方法执行此操作,如下所示:

-(void)request:(RKRequest *)request didFailLoadWithError:(NSError *)error{
    NSLog(error.domain);
    NSLog([NSString stringWithFormat:@"%d",error.code]);
    NSLog(error.localizedDescription);
    NSLog(error.localizedFailureReason);
    [request cancel];
    [request reset];
    [request send];
}

但是,我收到以下错误:

2013-01-14 11:19:29.423 Mobile_ACPL[7893:907] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempting to add the same request multiple times'

我怎样才能实现这一目标?

1 个答案:

答案 0 :(得分:2)

错误消息表示您尝试(重新)发送的request仍在某些内部队列中。可能,让系统有更多时间来处理cancelreset可以使事情有效。

试试这个:

-(void)request:(RKRequest *)request didFailLoadWithError:(NSError *)error{

  [request cancel];
  [request reset];

  dispatch_async(dispatch_get_current_queue(), ^() {
      [request send];
  }
}

希望它有所帮助。如果这不起作用,那么可能延迟一点(重新)发送可能会有所帮助。这相当于(延迟1.0秒):

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * 1.0),
               dispatch_get_current_queue(),  ^() {
      [request send];
  });

或完全发出copy请求并发送。