【问题标题】:Swift - Unable to retrieving data from Firebase databaseSwift - 无法从 Firebase 数据库中检索数据
【发布时间】:2018-09-04 05:54:13
【问题描述】:

我是一名初学者 Swift 程序员。我正在学习从 Firebase 数据库中检索数据。

调试控制台显示:

“无法将 '__NSDictionaryM' (0x11020b4f8) 类型的值转换为 'NSString' (0x10f37b2a8)。2018-03-26 15:49:25.442062+0800 消息传递应用程序 [4594:1197722] 无法转换 '__NSDictionaryM 类型的值' (0x11020b4f8) 到 'NSString' (0x10f37b2a8)"。

我在代码末尾放置了一个断点,并设法确认postDict 正确地从快照中检索数据。但是,数组 postData 无法追加。如果有人能给我建议来克服这个问题,我将不胜感激。非常感谢

var postData = ["message 1", "message 2"]

postRef = FIRDatabase.database().reference()

refHandle = postRef.observe(FIRDataEventType.value, with: { (snapshot) in
    let postDict = snapshot.value as? [String : AnyObject] ?? [:]
    // ...

    for ( _, myvalue) in postDict {
        self.postData.append(myvalue as! String)

    }
    self.tableView.reloadData()       
}) 

【问题讨论】:

  • 您是否遇到任何错误?
  • “无法将 '__NSDictionaryM' (0x10b9b34f8) 类型的值转换为 'NSString' (0x10ab232a8)。”显示在调试器控制台上。但它并没有显示为错误。
  • 我有截图,怎么上传到stack exchange?我是新来的
  • 您可以edit 您的问题包含该信息。在the advanced help 中,您可以了解更多关于您可以在问题中执行的操作,包括图片。

标签: ios swift database firebase swift4


【解决方案1】:

查看您的postDict 调试控制台输出,我猜您只是忘记访问"Posts" 键(在填写相应的self.postData 之前)。例如:

let valueDict = snapshot.value as? [String: AnyObject] ?? [:]
let postDict = valueDict["Posts"] as? [String: String] ?? [:]
// ...

for (_, postString) in postDict {
    self.postData.append(postString)
}

顺便说一句,您还可以使用 尾随闭包 语法糖进一步简化代码:

refHandle = postRef.observe(FIRDataEventType.value) { (snapshot) in
    /* observer body */
}

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多