7

iOS アプリから Web サービスを呼び出していますが、返されるまでに最大 4 分かかる場合があります。オブジェクトの呼び出しと読み込みに RestKit を使用しています。私が見つけたのは、リクエストに時間がかかっている場合、〜60秒後にタイムアウトエラーが発生することです。timeoutInterval をばかげた量に設定しようとしましたが、それでも 60 秒後にタイムアウトします。

RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:HOSTNAME];

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

//timeout
objectManager.client.timeoutInterval = 1000;

サービスの呼び出しは次のとおりです。

- (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];

}

バックグラウンド スレッドで Web サービスの呼び出しを行っています。その設計に問題を引き起こしている可能性があるものはありますか? iOS がバックグラウンド スレッドを 60 秒以上実行させないなど、何が想像できませんか? 何が問題なのかわかりません。

タイムアウトは、サーバーから応答を取得するのにかかる時間ですか、それともサーバーから全体の応答を取得するのにかかる時間ですか? 非常に大きな json 応答を返す可能性があります。タイムアウト制限内にすべてを返す必要がありますか?それとも、制限内でサーバーから応答を取得する必要があるだけですか?

4

3 に答える 3

2

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

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

したがって、タイムアウト間隔に問題がある場合は、このメソッドでキャッチされます。

于 2012-11-08T21:18:33.933 に答える
0

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

警告: リクエストにタイムアウトを設定すると、 も呼び出さない限り、設定されたタイムアウトを尊重しないリクエストが表示されます[requestObject createTimeOutTimer]

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

RestKit のデフォルトのタイムアウトは 120 秒であるため、これはおそらく NSURLConnection タイムアウトです。

于 2012-10-25T17:12:11.733 に答える