我正在使用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()));
如果我能提供任何其他代码,请告诉我。提前谢谢!
编辑: 此外,这是模拟器和设备上的问题。
答案 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];
//}