NSUserDefault 值发现 nil 并终止应用程序
NSUserDefault Value found nil with kill the App
我只是想在用户登录或注册 App 时将用户 ID 和状态保存为 UserDefaults
中的真实值。
UserDefaults.standard.set(user?.CustID, forKey: "CustID")
UserDefaults.standard.set(true, forKey: "status")
所以当用户在我的 Appdelegate
中重新打开应用程序时,我检查状态是否为真然后用户直接传递 HomeScreen
如果状态为假则在登录屏幕上传递。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let status = UserDefaults.standard.bool(forKey: "status")
if (status == true) && (custID != "") {
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "HomeTicketViewController") as! HomeTicketViewController
let navigationController = UINavigationController(rootViewController: nextViewController)
let appdelegate = UIApplication.shared.delegate as! AppDelegate
appdelegate.window!.rootViewController = navigationController
}else {
let storyBoard : UIStoryboard = UIStoryboard(name: "Login", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
let navigationController = UINavigationController(rootViewController: nextViewController)
let appdelegate = UIApplication.shared.delegate as! AppDelegate
appdelegate.window!.rootViewController = navigationController
}
}
我的状态为真,但我发现 CustID
为零。
有解决办法吗?
默认为false
let status = UserDefaults.standard.bool(forKey: "status")
所以状态一开始是假的,状态为真并不意味着CustID
没有保存nil
UserDefaults.standard.set(user!.CustID, forKey: "CustID")
因为用户可能为零所以强制解包以验证
在 userdefault
中,如果在 userdefaults
中找不到对应于键的值,则 userdefault
return nil
如果是布尔值,则 returns false
.
在您的情况下,当您启动应用程序时,应用程序没有任何对应于 custID 的值,因此您得到 nil
.
您需要像这样添加支票
if (status == true) && (custID != nil){
:
:
}
我只是想在用户登录或注册 App 时将用户 ID 和状态保存为 UserDefaults
中的真实值。
UserDefaults.standard.set(user?.CustID, forKey: "CustID")
UserDefaults.standard.set(true, forKey: "status")
所以当用户在我的 Appdelegate
中重新打开应用程序时,我检查状态是否为真然后用户直接传递 HomeScreen
如果状态为假则在登录屏幕上传递。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let status = UserDefaults.standard.bool(forKey: "status")
if (status == true) && (custID != "") {
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "HomeTicketViewController") as! HomeTicketViewController
let navigationController = UINavigationController(rootViewController: nextViewController)
let appdelegate = UIApplication.shared.delegate as! AppDelegate
appdelegate.window!.rootViewController = navigationController
}else {
let storyBoard : UIStoryboard = UIStoryboard(name: "Login", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
let navigationController = UINavigationController(rootViewController: nextViewController)
let appdelegate = UIApplication.shared.delegate as! AppDelegate
appdelegate.window!.rootViewController = navigationController
}
}
我的状态为真,但我发现 CustID
为零。
有解决办法吗?
默认为false
let status = UserDefaults.standard.bool(forKey: "status")
所以状态一开始是假的,状态为真并不意味着CustID
没有保存nil
UserDefaults.standard.set(user!.CustID, forKey: "CustID")
因为用户可能为零所以强制解包以验证
在 userdefault
中,如果在 userdefaults
中找不到对应于键的值,则 userdefault
return nil
如果是布尔值,则 returns false
.
在您的情况下,当您启动应用程序时,应用程序没有任何对应于 custID 的值,因此您得到 nil
.
您需要像这样添加支票
if (status == true) && (custID != nil){
:
:
}