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){
    :
    :
}