【问题标题】:get document Firestore获取文档 Firestore
【发布时间】:2021-09-19 17:55:17
【问题描述】:

当我尝试从此视图获取文档时出现错误

线程 1:致命错误:在隐式展开以 db1.collection... 开头的行中的可选值时意外发现 nil。

但是如果我在另一个视图中尝试相同的获取文档,它会继续

这里有什么问题?

import UIKit
import FirebaseFirestore

class DetailPlantViewController: UIViewController,UITableViewDataSource, UITableViewDelegate {
    
    @IBOutlet weak var detailTableView: UITableView!
    
    var queryPlantData: String?
    
    var db1:Firestore!
    var plantDataArray = [PlantData]()
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        detailTableView.delegate = self
        detailTableView.dataSource = self
        detailTableView.register(MyDetailTableViewCell.nib(), forCellReuseIdentifier: MyDetailTableViewCell.identifier)
        tabBarController?.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Log Out", style: .plain, target: self, action: #selector(logOutPressed))
        
      
        
        db1.collection("plants").getDocuments { (snapshot, error) in
            if error == nil && snapshot != nil{
                for document in snapshot!.documents{
                    let documentData = document.data()
                    print(documentData)
                }
            }
        }
        //loadPlantData()
    }

【问题讨论】:

  • 那行代码不会抛出该错误(假设 db1 已填充)- 可能在闭包中。但是,如果您计划在此时使用返回的 Firebase 数据,则此 //loadPlantData() 可能是一个问题。由于 Firebase 的异步特性,firebase 闭包之后的任何内容都将在闭包中的代码之前执行。您能否添加一个断点并逐行遍历您的代码,直到您收到该错误并使用更多详细信息更新问题?

标签: swift firebase google-cloud-firestore


【解决方案1】:

你在任何地方设置db1吗?您需要使用db1 = Firestore.firestore() 进行设置,或者您正在访问Firestore 对象。

这应该在您访问集合之前完成

db1.collection("plants")...

【讨论】:

  • 是的,设置了我在粘贴时错误地删除了该行,但是有
  • 我有一个第一个表视图,当我连续单击后,代码工作在这个视图上另一个表视图,但这里的代码给出了错误
  • 你能编辑并把那行放回去吗?
猜你喜欢
  • 2018-09-03
  • 1970-01-01
  • 2021-07-20
  • 2018-04-09
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2021-12-24
  • 2019-07-04
相关资源
最近更新 更多