我正在尝试在连接失败时测试我的应用程序的行为。我正在关闭 wifi 的 iPad 上进行测试。当 Restkit 尝试调用 Web 服务时,我收到以下错误:
CPL[7713:6203] E restkit.network:RKRequest.m:545 Failed to send request to https://xxxxxxxx/APNS_WebService/rest/operations/initializeDevice?deviceID=c4a17f855d3cc824b174b71908480d4e505ebfb221cb4643da9270a07344c367 due to unreachable network.
问题是我想在委托回调方法中处理这种情况,但没有调用任何委托方法。我已经在请求上设置了委托,并实现了 requestDidFailLoadWithError、requestDidCancelLoad、requestDidTimeout 和 objectLoaderDidFailWithError。这些都没有被调用。
为什么不叫我的代表?
编辑:在 RKRequest.m 中设置断点后,我看到实际上正在执行以下行:
[self performSelector:@selector(didFailLoadWithError:) withObject:error afterDelay:0];
但是,我的委托方法没有被调用。
这是我设置委托的地方:
request = [client requestWithResourcePath:[NSString stringWithFormat:@"/initializeDevice?deviceID=%@",deviceID]];
request.delegate=self;
[request sendAsynchronously];
编辑 2:实际上,我在上面发布的 RKRequest.m 中的行只是调用 RKRequest 中的另一个方法,但事实并非如此。在 didFailLoadWithError 中设置断点表明永远不会到达此代码。我不明白为什么这不起作用。
将 performSelector 更改为常规方法调用会出现在表面上,以提供我正在寻找的行为。这会破坏什么吗?我想我不确定为什么使用 performSelector 来调用同一类中的方法。
编辑 3:根据要求,这是我的委托方法:
-(void)request:(RKRequest *)request didFailLoadWithError:(NSError *)error{
NSLog(error.domain);
NSLog([NSString stringWithFormat:@"%d",error.code]);
NSLog(error.localizedDescription);
NSLog(error.localizedFailureReason);
[request reset];
[request send];
}