【问题标题】:'Nested arrays are not supported' FireStore Swift iOS'不支持嵌套数组' FireStore Swift iOS
【发布时间】:2018-12-18 18:28:26
【问题描述】:

我正在尝试通过 Google 将复杂的嵌套数组上传到 Firestore,但是当我设置我的数组时,我遇到了以下问题:

"'不支持嵌套数组'"

我正在尝试为 iOS/Swift 执行此操作。有解决办法吗?

我需要上传大约 10 个数组,它们的嵌套大小各不相同,最大的是这样:

var array : [[[[String]]]] =  [[[[String()]]]]

任何指导将不胜感激。

【问题讨论】:

  • 虽然 Firestore 支持数组,但它通常不是存储数据的最佳方式。这使得取回子级别的数据变得异常困难。此外,将数据深埋多层并不是 NoSQL 数据库的强项。 Denormalizing 在许多情况下,您的数据是最佳实践。 Firestore 在侮辱开发人员方面做得很好,但它仍然是一个“东西”。如果您可以提供一些额外的信息,例如示例数据或您正在尝试做的事情,我们可以提出更好的解决方案。
  • 您好 Jay,感谢您的回复,我的数据因其中的信息而异,我自己在应用程序中对数据进行排序,因为我正在读取 CSV 文件并将它们存储在一个数组中并从那里进行排序,我只是不想将 CSV 文件的内容上传到数组并不得不将信息重新排序到数组中,因为我在读取 CSV 文件时制作了数组,我不需要firebase本身来为我整理信息,我只需要一个存储数组的地方,因为我自己正在对它们进行排序。
  • 哈哈。等待。不。 Firebase 不会侮辱开发人员。好吧,通常不会;-)。那应该是隔离开发人员。
  • 关于我可以做些什么的任何建议? @杰伊
  • 但是,另一种方法是将您的 Array 转换为 Data 对象(可能存储为字符串)。已经有一段时间了,但是像 let data = try NSKeyedArchiver.archivedData(withRootObject: myArray, requiresSecureCoding: false) 然后在读回时 if let thisArray = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data)

标签: swift firebase google-cloud-firestore


【解决方案1】:

在 Jay 的帮助下,我能够通过将数组保存为数据对象来解决问题,如下所示:

var ARRAYNAME : [[String]] = [[String()]]
do {
         let tempArrayData = try NSKeyedArchiver.archivedData(withRootObject: self.ARRAYNAME, requiringSecureCoding: false)
        }catch{}

然后阅读它,我做了如下:

do { let thisArray = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(tempArrayData) }catch{}

for info in thisArray! as! [[String]] {
    print(info)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-03
    • 2020-02-29
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多