NSUserDefault Значение найдено ноль с убить приложение - PullRequest
0 голосов
/ 20 марта 2019

Я просто пытаюсь сохранить идентификатор пользователя и статус как истинное значение в UserDefaults при входе в систему или при регистрации в приложении.

UserDefaults.standard.set(user?.CustID, forKey: "CustID")
UserDefaults.standard.set(true, forKey: "status")

, поэтому, когда пользователь повторно открывает приложение в моем Appdelegate Iпроверьте статус, если он истинный, тогда пользователь напрямую передает 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 нашел ноль.Есть ли какое-то решение для этого?

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

В userdefault, если значение не найдено в userdefaults, соответствующем ключу, тогда userdefault возвращает nil, а в случае bool возвращает false.

В вашем случае, когда ваше приложение запускается, приложение не имеет никакого значения, соответствующего custID , поэтому вы получаете nil.

Вам нужно добавить проверку вот так

if (status == true) && (custID != nil){
    :
    :
}
1 голос
/ 20 марта 2019

Значение по умолчанию - false

 let status = UserDefaults.standard.bool(forKey: "status")

, поэтому сначала статус будет ложным, а также статус true не означает CustID сохранено нет nil

UserDefaults.standard.set(user!.CustID, forKey: "CustID")

как пользователь можетбыть ноль, так что принудительно разверните, чтобы убедиться, что

...