我正在尝试从MySQL下载数据。但是,当NSURLSession创建一个新线程时,数据尚未完全下载,因此主线程正在处理空值/崩溃。我已经使用过GCD的dispatch_async,但它的速度只有几毫秒。
在我的测试程序中,我有两个NSLog,一个在调用NSURLSession方法后直接调用,另一个在方法本身调用。输出(如下)显示NSURLSession延迟30毫秒。虽然时间本身并不多,但它会对我如何构建任务产生巨大影响。有没有办法暂停主线程,直到下载数据并完成方法?
2014-03-30 18:56:06.224 TestProgram[1396:60b] (null) 2014-03-30 18:56:06.258 TestProgram[1396:60b] [{"error":200}]
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]];
NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest:urlRequest
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
if(error == nil)
{
dispatch_async(dispatch_get_main_queue(), ^{
NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog(@"%@",text);
NSError *error;
self.json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
for(int i =0 ; i < self.json.count ; i++)
{
[dataParse setDictionary:_json[i]];
}
});
} else {
NSLog(@"Response:%@ %@\n", response, error);
}
}];
[dataTask resume];
答案 0 :(得分:0)
查看NSURLSessionDataTask完成例程的文档。这似乎暗示在那时数据没有完全下载。