为什么带有字符串字段的Firebase文档会被跳过?

时间:2019-12-22 09:17:56

标签: swift google-cloud-firestore

我已经构建了2个应用程序,一个在Android上,另一个当前在Swift中(两者具有相同的业务功能)。我对后者还很陌生。它们都由Firestore集合提供,该集合也在上述应用程序中创建,然后分别通过回收者视图和表视图显示。

在一个非常奇怪的场景中,文档中的一个字段(地址字段在创建时是可选的)可能为空值。如果为null,则整个文档将被读取并显示在表格视图中;但如果不为null,则不会在表格视图中看到整个文档。这仅在iOS应用中发生。

如果我从对象中完全删除了地址字段,那么我会看到两种类型的文档,即,当该字段为null且该字段包含字符串值时。这种奇怪的情况在Android应用程序中不会发生。

我在做什么错了?

这是我的对象:

import Foundation
import FirebaseFirestore

protocol DocumentSerializable {
    init?(dictionary:[String:Any])
}

struct Mealplan {
    var planType: Int
    var address: String

var Dictionary:[String : Any] {
    return [
        "planType": planType,
        "address": address
        ]
}

extension Mealplan : DocumentSerializable {
    init?(dictionary: [String : Any]) {

        let address = dictionary["address"] as? String,
        let planType = dictionary["planType"] as? Int

else { return nil }

        self.init(planType: planType, address: address)
}
}

这是我在视图控制器中的查询功能:

    func loadPlans() {

        guard let user = Auth.auth().currentUser else { return }

        let userPlans = db.collection("Plans").whereField("userId", isEqualTo: user!)

        userPlans.getDocuments() { querySnapshot, error in
            if let error = error {
                print("\(error.localizedDescription)")
            } else {

                self.planArray = querySnapshot!.documents.compactMap({PlanOject(dictionary: $0.data())})
                DispatchQueue.main.async {
                    self.planTableView.reloadData()
                }
            }
        }
    }

我可以理解,因为我将地址字段设置为字符串,所以它不会获取将其设置为null的文档,而是相反。

修改 具有DB结构;第一张图片的地址字段保存为字符串。在第二个地址中,该地址另存为空。

enter image description here enter image description here

0 个答案:

没有答案