Xcode 9更新Swift,紫色警告

Kir*_*llC 3 xcode ios swift swift4 xcode9

不知道为什么在更新到Xcode 9之后我的项目(最初在Swift 3中创建)显示紫色警告: UITextField.text只能在主线程中使用

我只在if语句中检查文本字段是否为空...附加截图.

在此输入图像描述

Jer*_*myP 10

登录管理器在主线程以外的线程上运行闭包,您不能在主线程上使用用户界面元素.

其他人已经说过只读边线上的UI属性就可以了,它们可能是正确的,但它没有绝对的保证,而且,就个人而言,我会注意这些警告.例如,访问这些属性可能会产生副作用.也许他们的值被缓存在某个地方,并且主要线程正在更新或删除属性的过程中,只是当您想要访问它时.

使警告静音的正确方法是在主线程上执行你的cloasure,例如

LoginManager.checkLoginStatus {
    isLoggedIn in

    DispatchQueue.main.async {

        // Do all your UI stuff here

    }
 }
Run Code Online (Sandbox Code Playgroud)

这样,运行闭包的线程除了调度代码在主队列中运行总是在主线程上运行之外什么都不做.


Bla*_*len 7

简单地添加 DispatchQueue.main.async 将阻止这种情况,并且在 swift 文档中推荐。

DispatchQueue.main.async { 
    //code that caused error goes here
}
Run Code Online (Sandbox Code Playgroud)


Pun*_*rma 5

XCode 9包含一个主线程检查器工具,该工具检查主线程上是否发生了与UIKit相关的任何事情。应该防止从后台线程触摸UIKit会造成问题的情况。

虽然,建议保留此工具,但如果它对您来说太麻烦了,您可以将其关闭:

XCode->编辑方案->目标->诊断->取消选中运行时API检查

在此处输入图片说明