как проверить, что асинхронный блок 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

        });
    });