NSURLSession在主线程中

时间:2014-03-30 13:03:08

标签: mysql ios multithreading

我正在尝试从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];

1 个答案:

答案 0 :(得分:0)

查看NSURLSessionDataTask完成例程的文档。这似乎暗示在那时数据没有完全下载。