Swift4
in Xcode 9
を使用すると、
UIApplication.delegateはメインスレッドからのみ使用する必要があります
....メインスレッドからのみ使用する必要があります
バックグラウンドスレッドグループから呼び出されるUI API
紫色の警告。
私のコード;
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
警告行は
public var context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
このような別の警告。
let parameters = [
"tel": "\(self.phone.text!)"
] as [String : String]
与える
UITextField.textはメインスレッドからのみ使用する必要があります
再び同じエラー。
どうすれば修正できますか?何か案が ?
バックグラウンドキューでこの呼び出しを行っています。修正するには、次のようなものを試してください...
public var context: NSManagedObjectContext
DispatchQueue.main.async {
var appDelegate = UIApplication.shared.delegate as! AppDelegate
context = appDelegate.persistentContainer.viewContext
}
これはこれを行うにはかなり悪い方法ですが...あなたはあなたのApp Delegateをグローバル変数として使用しています(私たちは皆それが悪いことを知っています!)
View ControllerからView Controllerに管理対象オブジェクトのコンテキストを渡すことを検討する必要があります…
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:
(window?.rootViewController as? MyViewController)?.moc = persistentContainer.viewContext
}
等々