Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 主线程中的NSURLSession_Mysql_Ios_Multithreading - Fatal编程技术网

Mysql 主线程中的NSURLSession

Mysql 主线程中的NSURLSession,mysql,ios,multithreading,Mysql,Ios,Multithreading,我正在尝试从MySQL下载数据。但是,当NSURLSession创建新线程时,数据尚未完全下载,因此主线程正在处理空值/崩溃。我使用了GCD的dispatch_async,但是它的速度慢了几毫秒 在我的测试程序中,我有两个nslog,一个直接在调用NSURLSession方法之后,另一个在方法本身中。输出(如下)显示NSURLSession延迟了30毫秒。虽然时间本身并不多,但它将对我如何安排任务产生巨大影响。有没有办法暂停主线程,直到数据下载完毕,方法完成 2014-03-30 18:56:0

我正在尝试从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}] 2014-03-30 18:56:06.224测试程序[1396:60b](空) 2014-03-30 18:56:06.258测试程序[1396:60b][{“错误”:200}]
NSURLSessionConfiguration*defaultConfigObject=[NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession*defaultSession=[NSURLSession sessionWithConfiguration:defaultConfigObject委托:无委托队列:[NSOperationQueue mainQueue]];
NSURLSessionDataTask*dataTask=[DefaultSessionDataTaskWithRequest:urlRequest
completionHandler:^(NSData*数据,NSURLResponse*响应,NSError*错误)
{
如果(错误==nil)
{
dispatch\u async(dispatch\u get\u main\u queue()^{
NSString*text=[[NSString alloc]initWithData:数据编码:NSUTF8StringEncoding];
NSLog(@“%@”,文本);
n错误*错误;
self.json=[NSJSONSerialization JSONObjectWithData:data选项:NSJSONReadingAllowFragments错误:&error];
for(int i=0;i
查看NSURLSessionDataTask完成例程的文档。这似乎意味着数据在那时没有完全下载

我现在认为应该通知视图控制器中的一个代理数据已经下载,并相应地更新VC。想法?您永远不应该同步执行网络请求(即不要让主线程等待网络请求)。您应该向我们展示正在崩溃的代码,但总体思路是您启动需要网络请求的
completionHandler
中的数据的任务,而不是在它之后。啊,干杯。它崩溃的原因是NSDictionary没有我要查找的名称的密钥。然后,查找这些词典条目的代码应该检查
nil
,并适当地处理它(而不是尝试将网络请求更改为同步)。如果您使用同步请求,应用程序的响应速度会降低,并且可能会被看门狗进程终止。谢谢。然而,处理nil值并不能解决OP中讨论的直接问题。我之所以得到nil值是因为网络请求的延迟。需要启动一个新请求以引入所需数据的处理。这样做,我将启动一个不必要的新请求。谢谢你的意见。我将在上午输入委托方法。:)
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];