как проверить, что асинхронный блок dispatch завершен
поэтому в основном мне нужно иметь возможность запускать сегмент после того, как блок закончил работу. У меня есть блок, который делает некоторые вещи JSON, и мне нужно знать, когда это закончится.
у меня есть очередь, которую я назвал json_queue.
jsonQueue = dispatch_queue_create("com.jaboston.jsonQueue", NULL);
у меня тогда есть блок dispatch_async с этим синтаксисом:
dispatch_async(jsonQueue, ^{
[self doSomeJSON];
[self performSegueWithIdentifier:@"modaltomenu" sender:self];
});
это не позволит мне выполнить строку: "[self performSegueWithIdentifier:@ "modaltomenu" sender: self];"
пытался получить веб блокировка из потока, отличного от основного потока или веб-потока. Это может быть результатом вызова UIKit из вторичного потока. Сейчас рушится...
где я могу проверить, когда поток сделал свою грязную работу, чтобы я мог вызвать segue?
спасибо милые люди.
PS: пиво и ups и плюшевые мишки и цветы тому, кто может помочь
2 ответов
вы должны вызывать методы UI только в основном потоке. Попробуйте отправить performSegueWithIdentifier: в главной очереди:
dispatch_async(jsonQueue, ^{
[self doSomeJSON];
dispatch_sync(dispatch_get_main_queue(), ^{
[self performSegueWithIdentifier:@"modaltomenu" sender:self];
});
});
dispatch_async(jsonQueue, ^{
[self doSomeJSON];
dispatch_async(dispatch_get_main_queue(), ^{
[self performSegueWithIdentifier:@"modaltomenu" sender:self];
//Finished with async block
});
});