2017-09-14 3 views
5

警告メインスレッドから使​​用しなければならないことは、私に与えスウィフト4、私は<code>Xcode 9</code>で<code>Swift4</code>を使用している場合のみ

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だけ

同じエラー再びメインスレッドから使​​用しなければなりません

..

は、私はそれをどのように修正することができますか?何か案が ?

答えて

15

このコールはバックグラウンドキューで行います。これは、これを行うにはかなり悪い方法ではあるが

public var context: NSManagedObjectContext 

DispatchQueue.main.async { 

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

を修正、のような何かをしようと...

するには...あなたは(私たちすべてが悪いです知っている!)グローバル変数として、あなたのアプリケーションの委任を使用している

ます...コントローラを表示するビューコントローラから管理オブジェクトコンテキストを渡すことで

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: 

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

ので

+0

の属性の公開」を与えになります唯一の非ローカルスコープのエラーで使用することができ – SwiftDeveloper

+0

'public'を削除しようとしましたか? –

+0

私のsettings.swiftファイルでこのファイルがクラスではなく、アプリで多くのエラーが発生しました。アプリケーションデリゲートでそのコードを移動する必要がありますか? – SwiftDeveloper

関連する問題

 関連する問題