当我在test "should get root" do
get static_pages_home_url
assert_response :success
end
中使用Swift4
给我
UIApplication.delegate必须仅在主线程中使用
....必须仅在主线程中使用
从后台线程组
调用的UI API
紫色警告。
我的代码;
Xcode 9
警告线是;
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
给予
UITextField.text必须仅在主线程中使用
再次出现相同的错误..
我该如何解决?有什么想法吗?
答案 0 :(得分:52)
您正在后台队列中进行此调用。要修复,请尝试类似......
public var context: NSManagedObjectContext
DispatchQueue.main.async {
var appDelegate = UIApplication.shared.delegate as! AppDelegate
context = appDelegate.persistentContainer.viewContext
}
虽然这是一个非常糟糕的方法...你正在使用你的App Delegate作为全局变量(我们都知道这很糟糕!)
您应该查看将托管对象上下文从视图控制器传递到视图控制器...
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:
(window?.rootViewController as? MyViewController)?.moc = persistentContainer.viewContext
}
等等