1

ユーザがアカウントを作成したとき、彼らはサーバに登録された日時を希望します。私はこれをしようとすると、次のエラーが表示されます。Firebaseに日付と時刻をアップロードするときのエラー

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) 
      } 

      } 

答えて

1

のキャッチされない例外で終了し、あなたはfirebaseにタイプNSDateの値を保存しようとしていますthis answer says として、あなたは数

let interval = NSDate().timeIntervalSince1970 

、あなたはそれを読みたいときはこのようにそれを読むので、あなたのコードは、この

のようなものでなければなりませんよう、あなたの値を格納する必要があります210

ので、あなたのコードは、この

@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としてそれを格納することです:この問題を解決するための他の最も簡単なアプローチがいくつかあります。私は自分の答えに含まれないので、検索を許可し、良いコードが自分自身を繰り返さないリファクタリングされたコードであることを覚えておくことができます。

関連する問題