FirstViewControllerでネーム、メアド、パス、座標をuserID以下に保存して
SecondViewControllerでイベントがあった時にSecondViewControllerで取得した座標をFirstViewControllerで作成したuserID以下の座標ノードに上書きしたいです。
エラーはSecondViewController内に記載しています。
アドバイスよろしくお願いします。
FirstViewController
1let userID = Auth.auth().currentUser?.uid 2//全て実装完了してます 3func writeToDB() 4 { 5 let email = emailAdress.text 6 let password = passWord.text 7 8 let latitudeSt: String = userDefaults.object(forKey: "lati") as! String 9 let longitudeSt: String = userDefaults.object(forKey: "longi") as! String 10 11 guard let Email = email, let Password = password else { return } 12 13 Auth.auth().createUser(withEmail: Email, password: Password) { result, error in 14 let userInfo = ["mail": self.emailAdress.text, "password": self.passWord.text, "username": self.userName.text] 15 let userCoordinate = ["latitude": latitudeSt, "longitude": longitudeSt] 16 self.ref.child("users").child(self.userID!).setValue(userInfo) 17 self.ref.child("users").child(self.userID!).child("coordinate").setValue(userCoordinate) 18 self.userDefaults.set(self.userID, forKey: "ID") 19 print("OK") 20 } 21 22 }
SecondViewController
1func rewriteToDB(){ 2 3 //Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional valueのエラーが出ています。 4 guard let key = ref.child("users").child(self.userID!).child("coordinate").key else { return } 5 let userCoordinate = ["latitude": latitude.text, "longitude": longitude.text] 6 let childUpdates = ["/users/(userID)/(key)/": userCoordinate] 7 ref.updateChildValues(childUpdates) 8 }
SecondViewControllerの userID が nil になってるとかはありませんか?
guard let でアンラップする前に print(userID) とか追加して値を確認していただけませんか?
返信遅くなりすみません。
print(userID)の結果が
Optional("7AdBZvTzjjMINFnLAekYblyHISL2")
になり、FirstViewControllerで作成した
"MXpj9fGBSSNW2lMzAFtVAnLFOgm1"と異なってしまっています。。。
なるほど... 確認ありがとうございます????♂️
結果が違うのも気になりますが、まずは Unexpectedly found nil while unwrapping an Optional value のエラーをなんとかしましょうか。
userID は SecondViewController のメンバー変数とかですか?
あと、rewriteToDB()をどこで実行しているのか、userIDにIDをセットしている部分の処理を追記していただけるともう少しわかるかもしれません。
userIDは
共通定数let userID = Auth.auth().currentUser?.uidです
rewiteToDBはSecondViewControllerないのlatiude,longitudeに表示している座標をデータベースに上書きするためのボタンです
すみません遅くなりました。
共通定数というとAppDelegateとかグローバルなスコープで定義した定数になる感じですか?
rewriteToDBはボタンタップ時の処理って感じですよね。
みた感じ他にアンラップしているところがなさそうなので、もし省略しているコードなどがあるなら載せていただけると何かわかるかもしれません。