也许一位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&UIActivityIndicator"移回主线程(之前没有错误消息)并创建一个线程来执行curl POST操作......现在我已经遵从了,然后突然间,我开始得到这条信息...?
任何人都可以解释我想把这个网络密集型操作放在哪里,顺便说一下,这会导致任何UIActivity Indicator/UIAlertView的内容冻结......
提前致谢...
[我只是穿着羊皮的linux程序员]
NpC*_*3t3 29
好的,答案(与Curl没有任何关系,或者对主线程有一些虚构的通知)
任何收到此错误的人,不要认为WEB线程或主线程,THINK,UITextView或UIScrollView或任何其他可能会传递给您的新线程的视图.
我的问题是一个UITextView.text,它作为参数传递给NEW线程...因此"_WebThreadLockFromAnyThread(bool)"
所以一个简单的解决方法是将它复制到本地NSString并将该副本传递给新线程(IE .. 警告:UIKit不应该从辅助线程调用)
[NSThread detachNewThreadSelector: @selector(sendStuff:) toTarget: self withObject: self.textField.text];
Run Code Online (Sandbox Code Playgroud)
当你看到蹄印,思考马,而不是斑马.
| 归档时间: |
|
| 查看次数: |
4817 次 |
| 最近记录: |