Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将自定义对象添加到Firestore中的数组_Ios_Swift_Firebase_Google Cloud Firestore_Swift5 - Fatal编程技术网

Ios 将自定义对象添加到Firestore中的数组

Ios 将自定义对象添加到Firestore中的数组,ios,swift,firebase,google-cloud-firestore,swift5,Ios,Swift,Firebase,Google Cloud Firestore,Swift5,我正在为客户制作一个订购应用程序,以订购他们的特定规格。当用户登录时,他们可以进入一个包含所有规格的tableview的选项卡,一旦他们点击一个单元格,它将带他们到一个新的视图控制器,该控制器将显示规格的更多信息。一旦在该视图控制器上,他们将能够添加该项目的x数量的托盘/卷/等。我可以将规范添加到Firestore,但我无法将其添加到Firestore中我需要的阵列中。我的目标是,在另一个选项卡上,用户可以查看他们试图订购的所有当前规格,直到他们点击提交。我目前正在使用user.uid访问Fir

我正在为客户制作一个订购应用程序,以订购他们的特定规格。当用户登录时,他们可以进入一个包含所有规格的tableview的选项卡,一旦他们点击一个单元格,它将带他们到一个新的视图控制器,该控制器将显示规格的更多信息。一旦在该视图控制器上,他们将能够添加该项目的x数量的托盘/卷/等。我可以将规范添加到Firestore,但我无法将其添加到Firestore中我需要的阵列中。我的目标是,在另一个选项卡上,用户可以查看他们试图订购的所有当前规格,直到他们点击提交。我目前正在使用user.uid访问Firestore内的特定客户订单

代码: @iAction func addPallet(\发送方:任何){

规格代码: 结构规范:可编码{

// Properties
var specNumber: String
var specDescription: String
var palletCount: Int
var palletsOrdered = 0

enum CodingKeys: String, CodingKey {
    case specNumber
    case specDescription
    case palletCount
    case palletsOrdered
}
}


我需要添加一些东西,如下图所示。用户将添加x个托盘,然后转到他们想要的下一个规范,并将其添加到Firestore中的阵列中。

好的,我想我得到了您想要做的。尝试:

db.collection(“orders”).document(userID).setData([“allMyData”:myArray])

“allMyData”将是您要保存数组的字段的名称,myArray将是您的数组(specAdded)。这就是您要查找的

如果该文档已经存在,您将希望使用.updateData而不是.setData来保留该特定文档中可能已经存在的所有其他字段


亲切问候

谢谢,它接近我所需要的。我将更新我的问题以显示我到底需要什么。您的数据库结构对我来说似乎有点奇怪,但这可能有其原因。也许您应该使用更深层的order.db.collection(“orders”).document(“userID”).collection(“specs”).document().setData(…)您也可以使用arrayUnion()或arrayRemove(),但为了充分利用firestore的功能,我建议改为使用文档和集合Hierachy。如果我的答案有帮助,请放弃或点击已解决的按钮。我愿意更改数据库的结构。我有两个集合(用户和订单)一个用于用户和他们的规格,另一个用于他们的订单,但在写了这篇文章之后,我可能应该在每个用户下面的用户中包含订单。我的最终游戏是每个用户都有自己的规格,可以向一个订单添加多个规格,所以每当他们添加一个带有x个托盘的规格时,它都会附加到Firestore内的阵列中。我可以也可能只是订购了规格和数量,而不是其他数据。通过查看您的屏幕截图,我觉得“规格”应该是一个集合,“0”和“1”将是该集合中的文档。如果您想坚持使用数组,可以通过ForementEnd数组运算符来实现。祝您好运,希望这会有所帮助。我最初是这样设置的,但无法正确获取数据并将其添加到我的自定义对象中。您必须处理spec字段(在数据库中)与数组类似。要将元素附加到Firestore中的数组,您必须抓取数组,将其解压缩,将元素添加到其中,并使用新数组更新文档,或者使用
arrayUnion
在不首先读取的情况下附加元素。Firestore中的数组的工作方式与您在iOS中使用的略有不同。例如,如果仅使用
arrayUnion
,数组将永远不会包含重复项(从这个意义上讲,它的工作方式类似于集合而不是数组,这是非常有用的)。但是,如果您直接使用重复项编写数组(而不使用
arrayUnion
),这些重复项将保留下来。请阅读以下初级读物:
// Properties
var specNumber: String
var specDescription: String
var palletCount: Int
var palletsOrdered = 0

enum CodingKeys: String, CodingKey {
    case specNumber
    case specDescription
    case palletCount
    case palletsOrdered
}