Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift 4 ,must be used from main thread only warning

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 ?

like image 479
SwiftDeveloper Avatar asked Sep 14 '17 11:09

SwiftDeveloper


1 Answers

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

like image 182
Ashley Mills Avatar answered Oct 04 '22 20:10

Ashley Mills