Подтвердить что ты не робот

Пытался получить веб-замок из потока, отличного от основного потока или веб-потока. Сбой сейчас

bool _WebTryThreadLock(bool), 0x8053ce0: Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now...

Я получаю эту ошибку.

Сегодня я впервые обнаружил эту ошибку, открывается диалоговое окно с паролем, и вверху отображается предупреждение, которое не должно появляться до появления viewWillAppear, когда отображается представление. Все это, казалось, отлично срабатывало, когда я разработал это на днях. Не знаете, почему блокировка потока была потеряна и как и должно было ее реализовать?

4b9b3361

Ответ 1

This may be a result of calling to UIKit from a secondary thread. Crashing now...

... и насколько я вижу, что вы делаете. Вы вызываете [alertProgress dismissWithClickedButtonIndex:0 animated:YES];, метод UIKit, из потока, отличного от вашего основного потока (-ов), который не разрешен.

Для очень прямого способа перезвонить в основной поток, если вы не можете использовать GCD, посмотрите DDFoundation.

В этом случае ваш код будет только изменяться;

[[alertProgress dd_invokeOnMainThread] dismissWithClickedButtonIndex:0 
                                       animated:YES]; 

Ответ 2

Я тоже столкнулся с этой проблемой, пока я вызывал метод

[self performSelector:@selector(myMethod) withObject:nil afterDelay:.01];

Теперь он решил, выполнив его в основном потоке

[self performSelectorOnMainThread:@selector(myMethod) withObject:nil waitUntilDone:NO];

Ответ 3

если вы собираетесь выполнять какую-либо операцию пользовательского интерфейса, это должно быть сделано в основном потоке.

просто вставьте кодировку внутри следующего синтаксиса

dispatch_sync(dispatch_get_main_queue(), ^{

//Your code goes here

});

или вы можете вызвать свой метод, используя следующий синтаксис

[self performSelectorOnMainThread:@selector(yourmethod:)withObject:obj waitUntilDone:YES]

Надеюсь, что это поможет

Ответ 4

//Самый простой способ - вызвать функцию, используя основной поток для этого.

dispatch_async(dispatch_get_main_queue(), ^{ [self doSomething]; });

Ответ 5

У меня была аналогичная проблема и я использовал

performSelectorOnMainThread:withObject:waitUntilDone:

чтобы решить эту проблему. Надеюсь, что это поможет.

Ответ 6

Ответ Durai в Swift 3:

DispatchQueue.main.async {
  //Your code goes here
}