【问题标题】:How to add data to a specific uid in Firestore Database?如何将数据添加到 Firestore 数据库中的特定 uid?
【发布时间】:2021-12-24 23:39:51
【问题描述】:

我想要一些关于如何在用户成功登录后将数据存储到特定用户的编码方面的帮助。下面是用户可以输入新读数详细信息的页面的代码。

import UIKit
import Firebase
import FirebaseAuth
import FirebaseFirestore

class NewBookViewController: UIViewController {

    @IBOutlet weak var bookTitleTextField: UITextField!
    @IBOutlet weak var bookAuthorTextField: UITextField!
    @IBOutlet weak var bookSummaryTextField: UITextField!
    
    @IBOutlet weak var ratingController: UIView!
    
    @IBOutlet weak var newBookCancelButton: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()

     
    }
    
   
    func validateFields() -> String? {
        
        
        if
            bookTitleTextField.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" ||
                bookAuthorTextField.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" ||
                bookSummaryTextField.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" {
            return "Please fill in all the fields."
        }
        return nil
    }

    @IBOutlet weak var newBookSaveButton: UIButton!

    var ref = Firestore.firestore()
    
    @IBAction func newBookSaveButtonTapped(_ sender: Any) {
        
        let uid = Auth.auth().currentUser?.uid
        self.ref?.child("new reading").child(uid).setValue(post)
        
        func post() {
            let bookTitleTextField = "bookTitle"
            let bookAuthorTextField = "bookAuthor"
            let bookSummaryTextField = "bookSummary"
            
            let post : [String : AnyObject] = [ "bookTitle" : bookTitleTextField as AnyObject, "bookAuthor" : bookAuthorTextField as AnyObject, "bookSummary" : bookSummaryTextField as AnyObject]
            
        }
        

this is the successful user sign up on cloud firestore. after the user have logged in, I wanted to add those 3 data (title, author, summary) FOR the specific user.

【问题讨论】:

  • 您能否展示您目前的尝试并详细说明您卡在哪里? Firebase 文档非常好,并且有很多 Swift 示例。这将有助于我们了解在哪里具体指导您,而不是仅仅重写文档中已有的内容。
  • 嗨,我已经更新了我的尝试。
  • 这两个答案都回答了您的问题吗?
  • 抱歉回复晚了。它确实帮助我理解这个想法。非常感谢

标签: ios swift firebase google-cloud-firestore


【解决方案1】:

看起来你很接近了。不过,现在,您不会从 post 返回任何东西。我认为您还意味着要从每个 UITextField 获取 text 值,而不是仅使用字段名称声明 Strings。

@IBAction func newBookSaveButtonTapped(_ sender: Any) {
  guard let uid = Auth.auth().currentUser?.uid else {
    //handle your error here
    return
  }
  self.ref?.child("new reading").child(uid).setValue(post())
}        

func post() -> [String:String] {
  return ["bookTitle" : bookTitleTextField.text ?? "", 
          "bookAuthor" : bookAuthorTextField.text ?? "", 
          "bookSummary" : bookSummaryTextField.text ?? ""]
}

【讨论】:

    【解决方案2】:

    您应该采取更安全的方法来处理用户 ID 和文本字段的值。在这里,只有当用户登录并且所有 3 个文本字段中都有字符串时,数据才会写入数据库。我不知道您打算将此文档放在哪个集合中,所以我选择了您编写的内容,但我怀疑它不正确。

    class NewBookViewController: UIViewController {
        private let db = Firestore.firestore()
    
        @IBAction func newBookSaveButtonTapped(_ sender: Any) {
            guard let uid = Auth.auth().currentUser?.uid,
                  let data = bookData() else {
                      return
                  }
            db.collection("new reading").document(uid).setData(data)
        }
        
        // This returns an optional dictionary (nil when the data is incomplete).
        // This is entirely optional (pun) but I suspect you don't want
        // empty fields in these database documents.
        func bookData() -> [String: Any]? {
            guard let title = bookTitleTextField.text,
                  let author = bookAuthorTextField.text,
                  let summary = bookSummaryTextField.text else {
                      return nil
                  }
            let data: [String: Any] = [
                "bookTitle": title,
                "bookAuthor": author,
                "bookSummary": summary
            ]
            return data
        }
    }
    

    【讨论】:

    • 我打算将数据(标题、作者、摘要)保留为用户的新阅读。
    • @AbyMatius 此代码可以正常工作。您只需要确定该文档属于哪个集合(或子集合)即可。
    猜你喜欢
    • 2016-12-09
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2019-08-12
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    相关资源
    最近更新 更多