2017-09-14 1 views
5

Quand je l'aide à Swift4Xcode 9 me donneSwift 4, doit être utilisé à partir thread principal seulement avertissement

UIApplication.delegate doit être utilisé de fil conducteur seulement

.... doit être utilisé à partir thread principal ne

API de l'interface utilisateur du groupe appelé thread d'arrière-plan

d'avertissement violet.

Mes 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 

La ligne d'avertissement est;

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

Un autre avertissement comme celui-ci;

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

Donne

UITextField.text doit être utilisé de fil conducteur seulement

même erreur à nouveau ..

Comment puis-je résoudre ce problème? Une idée ?

Répondre

15

Vous appelez cet appel dans une file d'attente d'arrière-plan. Pour corriger, essayer quelque chose comme ...

public var context: NSManagedObjectContext 

DispatchQueue.main.async { 

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

Bien que ce soit une façon assez mauvaise pour le faire ... vous utilisez votre délégué App en tant que variable globale (que nous connaissons tous est mauvais!) Vous

devrait regarder passer le contexte de l'objet géré du contrôleur de vue pour voir le contrôleur ...

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: 

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

et ainsi de suite

+0

donne l'attribut « public » ne peut être utilisé dans une erreur de portée non locale – SwiftDeveloper

+0

Avez-vous essayé de supprimer 'public'? –

+0

Donne beaucoup d'erreur dans l'application, que les codes dans mon fichier settings.swift ce fichier ne classe pas, je dois déplacer ces codes dans le délégué de l'application? – SwiftDeveloper