ios - 错误打印 user.default swift 3

标签 ios swift3

我有两个屏幕,第一个是登录屏幕,第二个屏幕显示用户信息。在登录屏幕上,我将 user_id 值保留在 user.defaults 中,当我转到第二个屏幕时,我使用该值来调用 Web 服务并显示其信息,但出现错误,并且 user.default 中保存的值是零。最后,当用户单击 cerrar_sesion 时,我删除了 user.defaults 我该如何解决它?这是我的代码:

func login(){
        let id_usuario = 7
        Constants.lbd.set(id_usuario, forKey: "id_usuario")
        self.performSegue(withIdentifier: "second_view", sender: self)
        Constants.lbd.synchronize()
}

第二个 View :

override func viewDidLoad() {
        super.viewDidLoad()
        btn_cerrarSesion.addTarget(self, action: #selector(cerar_sesion), for: .touchUpInside)
        info_usuario()
}

    func info_usuario(){
            let auth = "ASASDWDASD!"
            let id_usuario = Constants.lbd.object(forKey: "id_usuario") as? Int
print(id_usuario)
            Services.objServices.ServObtUsuario(auth: auth!, id_usuario: id_usuario!).then{
                data -> Void in
                let res = JSON(data)
                let status = res["status"].boolValue
                if(status){
                    let info_usuario = res["data"]["usuarios"]
                    for(_, sub_res):(String, JSON) in info_usuario{
                        self.lbl_nombres_usuario.text = sub_res["nombres"].stringValue+" "+sub_res["apellidos"].stringValue
                        self.lbl_username.text = sub_res["username"].stringValue
                    }
                }else{
                    let error = res["error"]["error_data"].stringValue
                    print(error)
                }
                }.catch{
                    error -> Void in
            }
        }


func cerar_sesion(){
        self.performSegue(withIdentifier: "second_view", sender: self)
        Constants.lbd.object(forKey: "id_usuario")        
        Constants.lbd.removeObject(forKey: "id_empresa")
        Constants.lbd.removeObject(forKey: "rol")
        Constants.lbd.removeObject(forKey: "auth")
        Constants.lbd.synchronize()
    }

最后我在控制台中得到了这个: 零 fatal error :在解包可选值时意外发现 nil

提前致谢

最佳答案

首先,有一个专用方法可以从 UserDefaults 中读取 Int(假设 Constants.lbd 是一个类型别名 用于 UserDefaults.standard)

let id_usuario = Constants.lbd.integer(forKey: "id_usuario")

其次,不要使用 UserDefaults 在 View Controller 之间共享数据。将值保存在 UserDefaults 中很好,但最好在 segue 中传递值,例如通过 sender 参数

self.performSegue(withIdentifier: "second_view", sender: id_usuario)

请注意,这是 Swift 而不是 PHP 或 JavaScript。变量和函数名称应该是 camelCased 而不是 snake_cased

关于ios - 错误打印 user.default swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47312472/

相关文章:

ios - 如何使用自定义 NSTextStorage 清除 UITextView? [仅限 iOS7]

ios - Xcode 8 Storyboard问题

linux - 随机字母数字字符串 Linux Swift 3

swift - 使用 Swift 的 Bonjour 服务浏览器不获取服务信息

arrays - 附加到 [String : Any] dictionary structure 中的数组

iphone - NSURLConnection 数据请求末尾没有数据

ios - 更新 CloudKit 记录,得到 "UITextField.text must be used from main thread only"

ios - 在使用 Swift 3 的 Xcode 8 中寻找有关修订后的 NSPersistentContainer 的清晰教程

ios - Swift iOS 9 二维码扫描仪

ios - 使用CIFilter的链接器错误