iPhone应用程序大约75%的时间从服务器获得null响应

时间:2012-06-27 03:38:34

标签: iphone ios codeigniter nsurlconnection nsurlrequest

我正在使用NSMutableURLRequest从我的服务器获取数据。我正在提取的基于Codeigniter的api端点100%的时间来自网站的浏览器,但大约75%的时间用于该应用。

我运行了一个简单的测试,我将post值发送到服务器并将它们吐回应用程序。我每次都发送相同的值,大约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()));

如果我能提供任何其他代码,请告诉我。提前谢谢!

编辑: 此外,这是模拟器和设备上的问题。

3 个答案:

答案 0 :(得分:0)

代码看起来很好,除了在制作中你应该使用NSOperationQueue把它放在后台线程上。

timeoutInterval设置为什么?你试过增加吗?我敢打赌,你的服务器一直没有足够快的响应速度。

答案 1 :(得分:0)

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

data = [[NSMutableData alloc] init];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

答案 2 :(得分:0)

In - (void)connectionDidFinishLoading:(NSURLConnection *)连接我在下面的代码中注释掉了以下几行,由于某种原因,我每次都有强大的字典响应。

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];
//}