Ios 成功的Firestore写入未反映在数据中

Ios 成功的Firestore写入未反映在数据中,ios,swift,firebase,google-cloud-firestore,Ios,Swift,Firebase,Google Cloud Firestore,我希望通过setData(合并)写入来更新文档字段的数据,但即使成功完成,也不会更新。updateData可以工作,但我不明白为什么setData在这个实例中不工作 我正在对Firestore和以下路径执行以下写入操作: setDatato firstCollection/uniqueDoc 批量setData到第二次采集/uniqueDoc1(批量写入1-5次之间) 事务更新数据到第三个集合/uniqueDoc 没有打印错误,所有数据和语法都正确,并且#2加#3写入成功地反映在数据中-#1不正

我希望通过setData(合并)写入来更新文档字段的数据,但即使成功完成,也不会更新。updateData可以工作,但我不明白为什么setData在这个实例中不工作

我正在对Firestore和以下路径执行以下写入操作:

  • setData
    to firstCollection/uniqueDoc
  • 批量
    setData
    到第二次采集/uniqueDoc1(批量写入1-5次之间)
  • 事务
    更新数据到第三个集合/uniqueDoc
  • 没有打印错误,所有数据和语法都正确,并且#2加#3写入成功地反映在数据中-#1不正确

    任何指导都将不胜感激

    这是我的代码#1


    请编辑问题,以显示哪些问题没有按您期望的方式工作。你到底在观察什么?这和预期的不同吗?请具体说明。我建议阅读:@DougStevenson我已经更新了我的问题!简而言之,字段未通过setData写入进行更新。它在
    func runSecond
    func runThird
    中不会出现任何与实际问题或问题有关的内容,因此应该删除,因为它只是多余的代码。我们需要了解您所做的故障排除类型,因为
    first
    中的代码不完整。换句话说,如果oldData是一个空数组,代码将“运行”,但不会发生任何事情。在这里添加一个断点“guard let oldData”,并单步执行代码,检查变量。他们的人口是否如预期的那样?添加一个
    打印(firstCollection
    和一个
    打印(uniqueDocName)
    在使用firebase函数之前,它们会打印什么?@Jay谢谢你的建议。我之所以添加它,是因为我认为它可以为可能出现的错误提供上下文线索,比如太多的编写过程。这就是说,我已经删除了它。我还检查了所有传递的数据、类型和路径是否正确。你能提供一个wha的片段吗您的
    oldData
    数组是否包含?另外,您是否可以更新您的问题并解释具体要执行的操作?看起来您正在尝试删除一个节点,然后将其写回?这有点混乱。
    func first() {
        //oldData is not empty and is the same type as var updatedData
        //oldData = [
        //             "a": ["name":"aName", "dateAdded": dateValue, "imageUrl": "aImageUrl"]
        //             "b": ["name":"bName", "dateAdded": dateValue, "imageUrl": "bImageUrl"]
        //          ]
    
        guard let oldData = oldData else { return }
    
        var updatedData: [String: NSDictionary] = [:]
        updatedData = oldData
        updatedData["a"] = nil                       
    
        db.collection(firstCollection).document(uniqueDocName).setData(["data": updatedData], 
           merge: true) { error in
             guard error == nil else {
                print("Error:" , error)
                return
             }
             self.runOtherFunc()
        }        
    }