Tak więc, po uruchomieniu bloku, muszę mieć możliwość uruchomienia segue. Mam blok, który wykonuje niektóre rzeczy JSON i muszę wiedzieć kiedy to się skończyło.sposób sprawdzenia, czy blok dispatch_async zakończył działanie
Mam kolejkę, którą nazwałem json_queue.
jsonQueue = dispatch_queue_create("com.jaboston.jsonQueue", NULL);
Mam następnie blok dispatch_async z tej składni:
dispatch_async(jsonQueue, ^{
[self doSomeJSON];
[self performSegueWithIdentifier:@"modaltomenu" sender:self];
});
To nie pozwala mi wykonywać linię: "[self performSegueWithIdentifier: @" modaltomenu "nadawca: self];"
Próbowano uzyskać blokadę wstęgi z wątku innego niż główny wątek lub wątek internetowy. Może to być wynikiem wywołania UIKit z wątku dodatkowego. Rozbijanie teraz ...
Gdzie mogę sprawdzić, kiedy wątek wykonał swoją brudną robotę, abym mógł zadzwonić na adres?
Dziękuję cudowni ludzie.
PS: Piwo i ups i misie i kwiaty dla tego, kto może pomóc < 3.
ty masz upvote i piwo. (to jest odpowiedź, której szukałem!). Całkowicie zapomniałem, że w każdej chwili możesz wrócić do mainqueue. znakomity. – jimbob
Jestem nowy w tych rzeczach. Dlaczego jest to lepsze niż użycie performSelectorOnMainThread wewnątrz bloku? –
@jimbob Powinienem wspomnieć, że używanie 'dispatch_sync' zamiast' dispatch_async' w trzecim wierszu byłoby w tym przypadku lepsze (ja to zredagowałem). Ten wzór jest zalecany w materiale wideo WWDC2010 Session 206. @ranReloaded Korzystanie z innego bloku jest wygodniejsze, ponieważ nie trzeba tworzyć zupełnie nowej metody dla tak prostego zadania, a co najlepsze, można uzyskać dostęp do każdej zmiennej w zakresie definicji bloku. – Johnnywho