0

NSMutableURLRequestを使用してサーバーからデータを取得しています。私がフェッチしているCodeigniterベースのAPIエンドポイントは、Webサイトのブラウザーから100%動作しますが、アプリの場合は約75%動作します。

投稿値をサーバーに送信し、アプリに吐き戻すという簡単なテストを実行しました。毎回同じ値を送信していますが、正しい応答を受け取るのは約75%です。

これが私のアプリコードです。

// Request
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", URL_API, endpoint]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData];
[request setHTTPMethod:method];
[request setValue:contentType forHTTPHeaderField:@"content-type"];
[request setTimeoutInterval:timeoutInterval];

DLog(@"bodyValues: %@", bodyValues);

// Set body
[request setHTTPBody:[self encodeDictionary:bodyValues]];

// Connection
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if (connection) {
    data = [[NSMutableData alloc] init];
}
else {
    [self showError];
}

これが私のサーバーのコードです。

 header('HTTP/1.1 200 OK');
 header('Status: 200 OK');
 header('Access-Control-Allow-Origin: *');
 header('Access-Control-Request-Method: GET,POST');
 header('Access-Control-Allow-Headers: x-requested-with');
 header('Content-Type: application/x-json;charset=utf-8');
 header('Connection: keep-alive');
 print(json_encode($this->input->post()));

私が提供できる他のコードがあれば、私に知らせてください。前もって感謝します!

編集:また、これはシミュレーターとデバイスの両方で問題になります。

4

3 に答える 3

0

NSMutableData ivar、データが初期化される前に応答が受信されるかどうか疑問に思っています。

data = [[NSMutableData alloc] init];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
于 2012-06-27T14:48:03.570 に答える
0

コードは問題ないように見えますが、本番環境ではおそらく NSOperationQueue を使用してこれをバックグラウンド スレッドに配置する必要があります。

timeoutInterval は何に設定されていますか? 増やしてみましたか?私の賭けは、あなたのサーバーが常に十分に速く応答していないことです.

于 2012-06-27T03:55:12.350 に答える
0

- (void)connectionDidFinishLoading:(NSURLConnection *)connection で、以下のコードの次の行をコメントアウトしましたが、何らかの理由で毎回確実な辞書応答が得られます。

NSError *error = nil;
//responseString = [NSString stringWithUTF8String:[data bytes]];
responseDictionary = NULL;
//if (responseString != (id)[NSNull null] && responseString.length != 0) {
    responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONWritingPrettyPrinted error:&error];
//}
于 2012-06-27T15:57:30.840 に答える