RKObjectManager のタイムアウトを実装しています。私のコードスニペットは次のとおりです。
-(void)getObjects
{
RKObjectManager *sharedManager = [RKObjectManager sharedManager];
[self showLoading];
[sharedManager loadObjectsAtResourcePath:self.resourcePath delegate:self];
// Setting timeout here. goto failure
self.nTimer = [NSTimer scheduledTimerWithTimeInterval:TIMEOUT_INTERVAL target:self selector:@selector(didEncounterError) userInfo:nil repeats:NO];
}
- (void) didEncounterError
{
[self hideLoading];
[self standardErrorHandling];
//invalidate timer, this is done to ensure that if error occurs before timer expiry time, the error will not show again when timer is up (ISSUE HERE)
[self.nTimer invalidate];
}
- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects
{
....
//invalidate timer if load is successful (no issue here)
[self.nTimer invalidate];
}
- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error
{
....
//trigger encounter error method
[self didEncounterError];
}
上記の実装では、「遭遇エラー」メソッドで常にタイマーを無効にします。これは、タイマーが切れる前にエラーが発生するケースを軽減するためです。この場合、タイマーを無効にして、エラー メッセージが再び表示されないようにします。
ただし、エラーが発生した後 (タイマーが期限切れになる前) にもう一度エラー メッセージが表示されます。「遭遇エラー」メソッドの無効化が機能しなかったようです。私のコードの何が問題なのかアドバイスはありますか?