0

我正在使用 NSMutableURLRequest 从我的服务器获取数据。我从中获取的基于 Codeigniter 的 api 端点 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

在 - (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 回答
0

代码看起来不错,除了在生产中,您可能应该使用 NSOperationQueue 将其放在后台线程上。

timeoutInterval 设置为什么?你试过增加它吗?我敢打赌,您的服务器始终响应不够快。

于 2012-06-27T03:55:12.350 回答
0

我想知道在初始化您的 NSMutableData ivar 数据之前是否收到响应。

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