【问题标题】:Error when uploading date and time to Firebase将日期和时间上传到 Firebase 时出错
【发布时间】:2017-04-23 02:44:06
【问题描述】:

当用户创建帐户时,我希望他们在服务器上注册的时间和日期。尝试执行此操作时出现以下错误。

只能存储 NSNumber、NSString、NSDictionary 和 NSArray。 .... libc++abi.dylib:以 NSException (lldb) 类型的未捕获异常终止

@IBAction func registerTapped(_ sender: Any) {
    let namec = nameTextField.text
    if let email = emailTextField.text, let pass = passwordTextField.text, let name = namec?.capitalized {
        FIRAuth.auth()?.createUser(withEmail: email, password: pass, completion: { (user, error) in
            if user != nil {
                //user found


                let interval = NSDate().timeIntervalSince1970
                let date = NSDate(timeIntervalSince1970: interval)



                self.refD?.child("Users").child((user?.uid)!).setValue(["Email": email, "Name": name, "User Created": date])

                print("User Created And Added To Database", email, name, date)
                self.performSegue(withIdentifier: "registertologin", sender: self)
            }

            }

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database firebase-authentication


    【解决方案1】:

    您的错误相对容易解决,您正在尝试将 NSDate 类型的值作为 this answer says 保存到 firebase 您需要将值存储为数字

    let interval = NSDate().timeIntervalSince1970
    

    当你想读它时,你会像这样读它,所以你的代码应该是这样的

    let date = NSDate(timeIntervalSince1970: interval)
    

    所以你的代码应该是这样的

    @IBAction func registerTapped(_ sender: Any) {
    let namec = nameTextField.text
    if let email = emailTextField.text, let pass = passwordTextField.text, let name = namec?.capitalized {
        FIRAuth.auth()?.createUser(withEmail: email, password: pass, completion: { (user, error) in
            if user != nil {
                //user found
    
    
                 let interval = NSDate().timeIntervalSince1970
                 // let date = Date(timeIntervalSince1970: interval)
    
    
    
    
    
                self.refD?.child("Users").child((user?.uid)!).setValue(["Email": email, "Name": name, "User Created": interval])
    
    
                self.performSegue(withIdentifier: "registertologin", sender: self)
            }
    
            }
    

    或者你可以做的最简单的事情是你可以避免这种类型的错误是将它存储为一个字符串

    @IBAction func registerTapped(_ sender: Any) {
        let namec = nameTextField.text
        if let email = emailTextField.text, let pass = passwordTextField.text, let name = namec?.capitalized {
            FIRAuth.auth()?.createUser(withEmail: email, password: pass, completion: { (user, error) in
                if user != nil {
                    //user found
    
    
                     let interval = NSDate().timeIntervalSince1970
                     let date = Date(timeIntervalSince1970: interval)
                     let dateFormatter = DateFormatter()
                     dateFormatter.dateFormat = "dd/MM/yyyy" // you can change the date format to whatever you want
                     let dateString = dateFormatter.string(from: date)
    
    
    
    
                    self.refD?.child("Users").child((user?.uid)!).setValue(["Email": email, "Name": name, "User Created": dateString])
    
    
                    self.performSegue(withIdentifier: "registertologin", sender: self)
                }
    
                }
    

    PS:还有一些其他最简单的方法来解决这个问题,我不会在我的答案中包含,所以我可以让搜索和学习并记住一个好的代码是一个不应该重复自己的重构代码(不要重复自己!)。

    【讨论】:

      猜你喜欢
      • 2019-06-28
      • 2021-01-02
      • 2016-04-15
      • 2017-01-11
      • 1970-01-01
      • 2022-12-06
      • 2014-06-18
      • 1970-01-01
      相关资源
      最近更新 更多