Iphone Web Thread _WebThreadLockFromAnyThread

NpC*_*3t3 7 iphone uikit

也许一位Iphone Guru可以启发我......

我一直在逐行排除使用UIKit的任何线程调用/ NSInvocation,事实上,我已经100%确定从除MainThread IE之外的任何其他地方调用NO UIKit垃圾. .

if([NSThread isMainThread])
{
  blah....
  Call UIKit Crap here!
  and blah....
}
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都那么好,但是在我创建了一个线程来做一个http POST(使用LibCurl)后,我开始得到这个:

"void _WebThreadLockFromAnyThread(bool),0x4d7bbe0:从主线程或Web线程以外的线程获取Web锁定.不应该从辅助线程调用UIKit."

喜欢WTF ......?我甚至不能使用Thread中的Curl来进行网络密集型操作..?我只是把这个该死的东西从主线上移开,以符合他们(Apple的)UIKit的严格要求,"不要叫任何UIKit垃圾,除了主线......周期或其他!!!"

所以我将"UiAlertView&UIActivityIndi​​cator"移回主线程(之前没有错误消息)并创建一个线程来执行curl POST操作......现在我已经遵从了,然后突然间,我开始得到这条信息...?

任何人都可以解释我想把这个网络密集型操作放在哪里,顺便说一下,这会导致任何UIActivity Indicator/UIAlertView的内容冻结......

提前致谢...

[我只是穿着羊皮的linux程序员]

NpC*_*3t3 29

好的,答案(与Curl没有任何关系,或者对主线程有一些虚构的通知)

任何收到此错误的人,不要认为WEB线程或线程,THINK,UITextViewUIScrollView或任何其他可能会传递给您的新线程的视图.

我的问题是一个UITextView.text,它作为参数传递给NEW线程...因此"_WebThreadLockFromAnyThread(bool)"

所以一个简单的解决方法是将它复制到本地NSString并将该副本传递给新线程(IE .. 警告:UIKit不应该从辅助线程调用)

[NSThread detachNewThreadSelector: @selector(sendStuff:) toTarget: self withObject: self.textField.text];
Run Code Online (Sandbox Code Playgroud)

当你看到蹄印,思考马,而不是斑马.