NSURLSession PerformSegueWithIdentifier не работает

У меня есть следующий код, но я не уверен, почему он не работает:

 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 не запускается в вызове.

Любые идеи?


person tau    schedule 18.06.2014    source источник
comment
Взгляните на этот вопрос. stackoverflow .com/questions/5023566/   -  person Michael    schedule 19.06.2014


Ответы (1)


Если вы создаете объект NSURLSession таким образом, он создает новую очередь последовательных операций, которая не является основной очередью. Обработчик завершения метода dataTaskWithURL: запускается в очереди сеанса, поэтому он не работает, поскольку вы пытаетесь выполнить задачу пользовательского интерфейса в фоновой очереди. Чтобы исправить это, создайте свой сеанс следующим образом:

NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate: nil delegateQueue: [NSOperationQueue mainQueue]];
person rdelmar    schedule 18.06.2014