ios - 将日期和时间上传到 Firebase 时出错

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

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

Can only store objects of type NSNumber, NSString, NSDictionary, and NSArray.' .... libc++abi.dylib: terminating with uncaught exception of type 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)
            }

            }

最佳答案

你的错误相对容易解决,你试图将 NSDate 类型的值保存到 firebase 中作为 this answer says 您需要将您的值(value)存储为数字

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:还有一些其他最简单的方法可以解决这个问题,我不会将其包含在我的回答中,因此我可以让搜索和学习并记住一个好的代码是一个不应重复自己的重构代码(不要重复自己!)。

关于ios - 将日期和时间上传到 Firebase 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43566864/

相关文章:

php - iOS:如何使用给定 token 的 AFOAuth1Client

ios - 隐藏没有空格的 View

ios - 适用于 iPad 的交互式 3D 模型

javascript - 通过 Firebase Cloud 函数调用第三方 API(使用 Blaze 计划)。 react /还原

php - 将数据从 mysql 迁移到 Firebase

ios - XCode 不会在从 LLDB 调用的方法中的断点处停止

ios - iPhone将图像上传到Facebook相册并附上评论

使用 "2x"按钮时 iPhone OpenGL ES 应用程序在 iPad 上被终止

swift - 在表格 View 中选择单元格时删除动画

ios - Firebase-数据库结构效率与平坦度