关于在访问文本字段时从其他线程获取锁定的警告

时间:2013-01-08 02:48:55

标签: ios objective-c multithreading cocoa-touch uitextfield

我有一个名为UITextField的{​​{1}},我隐藏了输入:

_passwordTextField

每次我使用[_passwordTextField setSecureTextEntry:YES]; 访问字段的文本时,都会看到此警告:

  

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

如何删除此警告?

1 个答案:

答案 0 :(得分:3)

这与UITextField无关。 iOS UIKit要求在主线程上完成对UI的任何直接操作。不是来自后台线程。

如果您这样做,您的应用将会不稳定,在某些情况下甚至可能会崩溃。因此,规则不会从后台线程更新UIKit元素。请检查您的代码。

如果您使用的是iOS> = 4,则可以使用GCD代替:

dispatch_async(dispatch_get_main_queue(), ^{
    [self doSomething:1 b:2 c:3 d:4 e:5]; //changes UI method
});

更新:请再次检查您的代码。在处理线程问题时,不需要观察此警告发生在哪一行,但您需要完整地查看。看看整个方法是从主线程还是后台线程调用..