【问题标题】:Issue while getting data from Firestore in iOS在 iOS 中从 Firestore 获取数据时出现问题
【发布时间】:2019-12-19 17:38:27
【问题描述】:

我正在尝试从 Firestore 数据库中获取数据,数据结构是,

{
"teamImage"  : "ABC",
"teamName"  : "XYZ",
"players" : [
     "playerImage" : ["mnb","sadja"],
      "playerName" : ["aska","asdaj"]
]
}

我试图检索的代码是,

func readArray()
{

    let dbRef = Firestore.firestore()
    dbRef.collection("Team").getDocuments { (snapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
            print(snapshot!.documents)
            for document in snapshot!.documents {
                let docId = document.documentID
                let teamName = document.get("teamName") as! String
                let teamImage = document.get("teamImage") as! String
                let players = document.get("players") as! Dictionary<String, Any>
                print(players)
                for items in players
                {
                    let playerName = document.get("playersName") as? [Any]
                    print(playerName)
                }
                print(players)
                print(docId, teamName, teamImage)
            }
        }
    }
}

团队名称、团队形象和球员检索正常,但是当我尝试从球员数组中获取数据时,它会崩溃,球员在检索时看起来像这样,

["playerImage": <__NSArrayM 0x6000024eaa90>(

https://firebasestorage.googleapis.com/v0/b/basket-ball-tracking.appspot.com/o/%3CUIImage:%200x600002bc8bd0%3E%20size%20%7B4288,%202848%7D%20orientation%200%20scale%201.000000.jpg?alt=media&token=d18dfc89-1a21-45c9-b8f0-7f076cd15bc1, https://firebasestorage.googleapis.com/v0/b/basket-ball-tracking.appspot.com/o/%3CUIImage:%200x600002bc7950%3E%20size%20%7B3000,%202002%7D%20orientation%200%20scale%201.000000.jpg?alt=media&token=58faddd8-b343-4ec9-a09b-740678ccc80b ) , "玩家名": <__nsarraym>( 阿里, 哈姆扎 ) ]

【问题讨论】:

  • 请编辑问题以非常清楚文档中每个字段的数据类型。该文档的屏幕截图可能会有所帮助。似乎您实际上可能有真正想要地图的数组。文档浏览器应该清楚您正在处理的数据类型。
  • "it get crash" 请在控制台中显示错误信息。哪条线导致了崩溃? let playerName = document.get("playersName") as? [Any]?也许是因为它不是来自document,而是来自items

标签: swift google-cloud-firestore


【解决方案1】:

Players 是 [String: [String]] 类型的字典(值是字符串数组)

if let players = document.get("players") as? [String: [String]] {
  let names = players["playerImage"] ?? []
  for name in names {
    print(name)
  }

  let images = players["playerImage"] ?? []
  for image in images {
    print(image)
  } 
}

【讨论】:

  • 是的,这就是我想要完美的。 @udbhateja
猜你喜欢
  • 2020-01-16
  • 2019-04-03
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 2020-08-05
  • 2020-04-15
  • 1970-01-01
相关资源
最近更新 更多