ios - 如何从 Firebase 添加具有 setValue 的用户 在 ios 中读取和写入数据
问题描述
我是 Swift 的新手,我正在通过构建社交媒体应用程序来学习。我对尝试self.ref.child("users").child(user.uid).setValue(["username": username])
在我的代码中实现感到震惊(来自https://firebase.google.com/docs/database/ios/read-and-write)。我一直遵循 Kasey Schlaudt 的说明,在本教程的这一点上https://youtu.be/GrRggN41VF0?t=619他尝试添加一个用户,setValue
如我链接的 Firebase 文档中所示。我遇到的错误self.ref.child("users").child(user.uid).setValue(["username": username])
是
使用未解析的标识符“用户”和使用未解析的标识符“用户名”。
到目前为止,我的代码(与我signInPress
函数中视频中的原始代码略有不同)是
import UIKit
import Firebase
import SwiftKeychainWrapper
class ViewController: UIViewController {
@IBOutlet weak var UserImageView: UIButton!
@IBOutlet weak var usernameField: UITextField!
@IBOutlet weak var emailField: UITextField!
@IBOutlet weak var passwordField: UITextField!
override func viewDidLoad()
{
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool)
{
if let _ : Bool = KeychainWrapper.standard.string(forKey: "uid") != nil
{
self.performSegue(withIdentifier: "toFeed", sender: nil)
}
}
func storeUserData(userID: String)
{
//---------------------------problematic line---------------------------
//from https://firebase.google.com/docs/database/ios/read-and-write
//from https://youtu.be/GrRggN41VF0?t=619
self.ref.child("users").child(user.uid).setValue(["username": username])
([
"username": usernameField.text
])
}
@IBAction func signInPress(_ sender: Any)
{
//this way you make sure there is a property inside emailField.text and you have a variable you can easily use
if let email = emailField.text, let password = passwordField.text
{
Auth.auth().signIn(withEmail: email, password: password)
{ (result, error) in
if error != nil && self.usernameField.text!.isEmpty && self.UserImageView.image != nil
{
Auth.auth().createUser(withEmail: email, password: password)
{ (result, error) in
self.storeUserData(userID: (result?.user.uid)!)
KeychainWrapper.standard.set((result?.user.uid)!, forKey: "KEY_UID")
self.performSegue(withIdentifier: "toFeed", sender: nil)
}
} else
{
KeychainWrapper.standard.set((result?.user.uid)!, forKey: "KEY_UID")
self.performSegue(withIdentifier: "toFeed", sender: nil)
}
}
}
}
}
我非常感谢任何关于为什么 Kasey 不会发生错误以及我可能需要更改哪些内容才能执行相同过程的指示。先感谢您 !
解决方案
你实际上非常接近,更多的是一个错字问题。看到您的 storeUserData 函数需要一个名为 userID 的字符串吗?这就是存储该数据而不是user.uid
func storeUserData(userID: String) {
let username = self.usernameField.text
self.ref.child("users").child(userID).setValue(["username": username])
here ^^^^^^ userID instead of user.uid
}
推荐阅读
- rust - 什么是序列化函数的好签名?
- java - 如何从数据库jdbc加载所有表
- mysql - 我如何从对话中获取最后一条消息
- java - E/JavaBinder:!!!失败的活页夹交易!!!(包裹大小 = 1714072)
- node.js - .save() 不是函数(猫鼬)
- macos - 在 Inline::C 中链接 macos 的框架
- java - 当 TextInputEditText 为空时,TextInputLayout 框笔划不显示
- go - 如何从 Golang 包中的文档中恢复结构,Bleve
- jquery - 由于 SET 语句,SQL 查询失败
- postgresql - 如何启动具有有效初始设置的 postgres docker 容器?