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