2012-06-12 22 views
7

私はiOSアプリケーションからwebserviceを呼び出しています。これは返すまでに最大4分かかる場合があります。私はオブジェクトの呼び出しと読み込みにRestKitを使用しています。私が探しているのは、要求が長時間かかると、〜60秒後にタイムアウトエラーが発生するということです。 timeoutIntervalを不合理な量に設定しようとしましたが、〜60の後もタイムアウトします。ここでRestKitタイムアウトを無視する

RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:HOSTNAME]; 

objectManager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES; 
objectManager.client.disableCertificateValidation = YES; 

//timeout 
objectManager.client.timeoutInterval = 1000; 

は、サービスへの呼び出しされています。私は、バックグラウンドスレッドでWebサービスの呼び出しを

- (void)loadData 
{ 

NSString *uid = [self retrieveFromUserDefaults:@"login_preference"]; 
NSString *pwd = [self retrieveFromUserDefaults:@"password_preference"]; 

if([uid isEqualToString:@""] || [pwd isEqualToString:@""]){ 
    [self stopSpinner]; 
    [self enableUserInterface:YES]; 
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Missing Settings" 
                message:@"Please enter your login information in the settings." 
                delegate:nil 
              cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alert show]; 
    return; 

} 


RKObjectManager* objectManager = [RKObjectManager sharedManager]; 
NSDictionary *params = [NSDictionary dictionaryWithObjects: 
         [NSArray arrayWithObjects:uid, pwd, nil] 
                forKeys:[NSArray arrayWithObjects:@"uid", @"pwd", nil]]; 

// Load the object model via RestKit  
[objectManager loadObjectsAtResourcePath:[@"/synchData" appendQueryParams:params] delegate:self]; 

}

やっている - ことができることを設計の中で何かがあります問題を引き起こしている? iOSのようにバックグラウンドスレッドを60秒以上走らせないようなものは想像もできません。私はちょうど問題が何であるか把握することができません。

タイムアウトは、サーバーからの応答を取得するか、またはサーバーからの全応答を取得するのにかかる時間ですか?潜在的に非常に大きなjsonレスポンスを返しています - タイムアウト限度内ですべてを返す必要があるのですか、または制限内でサーバーからの応答を取得するだけですか?

+0

ご要望の発送方法を教えてください。タイムアウトは、アプリケーションが応答を得るまでにアプリケーションが待機する時間です。この時間内にすべてを返す必要はありません。 – lawicko

+0

ありがとうございます - 私は少し追加しました、それはあなたが意味するものですか?私は二重チェックし、私のタイムアウト間隔が何であっても、それは60秒後に死にそうです。 – Michaela

+1

はい、これが私の意図です。私はあなたのコードに何か間違っているとは思わない、どのようにタイムアウトをキャッチしますか? RestKitのドキュメントでは、デフォルトのタイムアウトは120秒に設定されており、タイムアウト関数 'は とdidFailLoadWithError:によってRKRequestConnectionTimeoutErrorを返します。'それを 'requestDidTimeout:'で捕まえると他のメカニズムが呼び出す可能性があります。タイムアウトをキャッチしてコールスタックを調べて、タイムアウトの原因を正確に突き止めるメソッドにデバッガを置くと、おそらく60秒の値がどこから来るのかを特定するのに役立ちます。 – lawicko

答えて

0

同様の問題が発生していますが、デリゲートメソッドrequestDidTimeout:(RKRequest*)requestは呼び出されません。 RKRequestまたはRKClientでタイムアウトを設定しても問題ありません。

警告: リクエストのタイムアウトを設定する場合、私はまた[requestObject createTimeOutTimer]を呼び出さない限り、要求は、設定されたタイムアウト を尊重しないで参照してください。

しかし、私が実装で気づいているのは、NSTimeIntervalに1000を使用していることです。タイムアウトは1000秒ですか? 1秒= 1000ミリ秒を意味する場合は1に変更してください。

RestKitのデフォルトのタイムアウトは120秒です。これはNSURLConnectionのタイムアウトの可能性が高いためです。

2

私はあなたの問題を理解していれば、解決策は次のようになります。

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

あなたはタイムアウト間隔に問題があるときに、それはこの方法で捕捉されます。

関連する問題