访问文本字段时从其他线程获取锁的警告
Posted
技术标签:
【中文标题】访问文本字段时从其他线程获取锁的警告【英文标题】:Warning about obtaining lock from other thread when accessing text field 【发布时间】:2013-01-08 02:48:55 【问题描述】:我有一个名为 _passwordTextField
的 UITextField
,我在其中隐藏了输入:
[_passwordTextField setSecureTextEntry:YES];
每次我使用passwordTextField.text
访问该字段的文本时,都会看到以下警告:
void _WebThreadLockFromAnyThread(bool), 0x9077460: 从主线程或web线程以外的线程获取web lock。不应从辅助线程调用 UIKit。
如何删除此警告?
【问题讨论】:
是的,所有代码都在主线程中调用,并且只有 SecureTextEntry UITextField 给出了这种警告,通常用于 UITextField 。 【参考方案1】:这与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
);
更新:请再次检查您的代码。在处理线程问题时,您需要观察的不是出现此警告的哪一行,而是需要完整查看。查看整个方法是从主线程还是后台线程调用..
【讨论】:
[body setObject:_nameTextField.text forKey:@"username"]; // ,它看起来只显示 SecureTextEntry UITextField 的waring。 请再次检查您的代码。在处理线程问题时,您需要观察的不是出现此警告的哪一行,而是需要完整查看。查看整个方法是从主线程还是后台线程调用以上是关于访问文本字段时从其他线程获取锁的警告的主要内容,如果未能解决你的问题,请参考以下文章