我有以下代码,但不确定为什么它没有运行:
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithURL:
[NSURL URLWithString:myURLString] completionHandler:^
(NSData *data, NSURLResponse *response, NSError *error)
{NSDictionary *json =
[NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
[self performSegueWithIdentifier:@"login" sender:self];}];
[dataTask resume];
preformSegueWithIdentifier可在外部工作,但不在括号内。但我使用NSUrlConnection做了类似的事情,并且工作正常。我非常了解NSURLSession有关为什么performSegueWithIdentifier不会在通话中运行的任何想法。
有什么想法吗?
答案 0 :(得分:2)
如果按照自己的方式创建NSURLSession对象,它将创建一个不是主队列的新串行操作队列。 dataTaskWithURL:方法的完成处理程序在会话的队列上运行,因此它无法正常工作,因为您正在尝试在后台队列上执行UI任务。要解决此问题,请按以下步骤创建会话
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate: nil delegateQueue: [NSOperationQueue mainQueue]];