我尝试使用UserDefaults值修改我的对象。我检查UserDefaults是true还是false的一些viewController,但有时它读为true有时是false。为什么会发生这种情况。我知道这是一个复杂的问题,但是当用户返回应用程序以查看其他应用程序时,我试图在关闭应用程序后更改应用程序中的UserDefaults值。这就是为什么我不得不更改userDefaults值但其无法正常工作莫名其妙地卡住了。
在我的服务内:
if response.products.count == 0 {
print("no products in app store at current time")
UserDefaults.standard.set(false, forKey: "isBool")
UserDefaults.standard.synchronize()
DispatchQueue.main.async {
AppDelegate.group.leave()
}
} else {
UserDefaults.standard.setValue(true, forKey: "isBool")
UserDefaults.standard.synchronize()
DispatchQueue.main.async {
AppDelegate.group.leave()
}
}
在AppDelegate中:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
var success:Bool = true }
AppDelegate.group.enter()Service.shared.getProducts()
/ *
if UserDefaults.standard.value(forKey: "isBool")
{
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "mainstoryboard")
self.window?.rootViewController = vc
}
*/
AppDelegate.group.notify(queue: .main) {
success = true
}
return success
}
我认为您在这里做错了
只需替换此行
AppDelegate.userDefaults.value(forKey: "isBool") as! Bool
到
UserDefaults.standard.value(forKey: "isBool")
//完整代码
AppDelegate.isBool = AppDelegate.userDefaults.value(forKey: "isBool") as! Bool
AppDelegate.isBool = UserDefaults.standard.value(forKey: "isBool") as! Bool
if AppDelegate.isBool== true {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "mainstoryboard")
self.window?.rootViewController = vc
}