Swift 4 ,must be used from main thread only warning

落爺英雄遲暮 提交于 2019-12-03 10:40:49

问题


When I using Swift4in Xcode 9 gives me

UIApplication.delegate must be used from main thread only

.... must be used from main thread only

UI API called from background thread Group

Purple Warning.

My codes;

var appDelegate = UIApplication.shared.delegate as! AppDelegate
public var context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let prefs:UserDefaults = UserDefaults.standard
var deviceUUID = UIDevice.current.identifierForVendor!.uuidString

Warning line is;

  public var context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

Another warning like this;

 let parameters = [
                        "tel": "\(self.phone.text!)"
                        ] as [String : String]

Gives

UITextField.text must be used from main thread only

Same error again..

How can I fix it ? Any idea ?


回答1:


You're making this call on a background queue. To fix, try something like…

public var context: NSManagedObjectContext

DispatchQueue.main.async {

    var appDelegate = UIApplication.shared.delegate as! AppDelegate
    context = appDelegate.persistentContainer.viewContext        
}

Although this is a pretty bad way to do this… you're using your App Delegate as a global variable (which we all know is bad!)

You should look at passing the managed object context from view controller to view controller…

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: 

    (window?.rootViewController as? MyViewController)?.moc = persistentContainer.viewContext
}

and so on



来源:https://stackoverflow.com/questions/46218270/swift-4-must-be-used-from-main-thread-only-warning

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!