Веб-тема для Iphone _WebThreadLockFromAnyThread - PullRequest
7 голосов
/ 09 июня 2011

Возможно, один Гуру Iphone может просветить меня ...

Я собирался построчно и устранял любые вызовы потоков / NSInvocation, которые используют UIKit, на самом деле, я сделалНа 100% уверен, что никакое дерьмо UIKit не вызывается из любого места, кроме MainThread IE.

if([NSThread isMainThread])
{
  blah....
  Call UIKit Crap here!
  and blah....
}

Пока все хорошо, но потом, после того как я создал поток для выполнения HTTP POST (используя LibCurl)Я начал получать это:

"void _WebThreadLockFromAnyThread (bool), 0x4d7bbe0: получение веб-блокировки из потока, отличного от основного потока или веб-потока. UIKit не должен вызываться из вторичного потока."

Как WTF ...?Я даже не могу использовать Curl из потока, чтобы выполнить интенсивную работу в сети ..?Я просто переместил эту чертову штуку из mainThread, чтобы соответствовать строгому их (Apple) UIKit: «Не называйте никакое дерьмо UIKit, кроме как из основного потока ... PERIOD или Else !!!»

Итак, я переместил «UiAlertView & UIActivityIndicator» обратно в основной поток (сообщений об ошибках раньше не было) и создал поток для выполнения операции POST curl ... Теперь, когда я выполняю требования, а затем всеВнезапно, я начинаю получать это сообщение ...?

Может кто-нибудь объяснить, где я должен поставить эту интенсивную работу сети, что, кстати, приведет к зависанию любого индикатора UIActivity / UIAlertView в ихдорожки ...

Заранее спасибо ...

[Я просто программист Linux в овечьей шкуре]

1 Ответ

29 голосов
/ 10 июня 2011

ОК, ответ (никак не связан с Curl или каким-то вымышленным уведомлением основного потока)

Любой, кто получит эту ошибку, не думайте WEB Тема или Главная Тема, ДУМАЙ, UITextView или UIScrollView или любая другой вид, который может быть передан вашей новой теме.

Моя проблема была в UITextView.text, который передавался в качестве аргумента в новый поток ... Следовательно "_ WebThreadLockFromAnyThread (bool)"

Так что простым исправлением было скопировать его в локальную строку NSString и передать эту копию в аргументе в новый поток (IE .. Предупреждение: UIKit не должен вызываться из вторичного потока )

[NSThread detachNewThreadSelector: @selector(sendStuff:) toTarget: self withObject: self.textField.text];

Когда вы видите отпечатки копыт, ДУМАЙТЕ лошадей, НЕ Зебры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...