【问题标题】:Swift 3 xcode 8 firebase database error when update data更新数据时出现Swift 3 xcode 8 firebase数据库错误
【发布时间】:2017-01-22 05:40:22
【问题描述】:

大家早上好,我正在使用 Firebase 并升级到新版本的 Xcode 我遇到了向 Firebase 数据库发送更多数据的问题。 这是错误:

终止应用程序二未捕获的异常'InvalidFirebaseData',原因:'(setValue :) 无法在 SenderId 存储 _SwiftValue 类型的对象。只能存储 NSNumber、NSString、NSDictionary 和 NSArray 类型的对象。 '

我知道是什么问题,我也在网上搜索,我上传的数据是字符串,升级到Xcode后给我这个错误,有人有同样的问题吗?

应该等几天,我也尝试更新 Firebase,但库没有更新。

【问题讨论】:

  • 给出你的代码你遇到错误的地方
  • 您使用的是哪个 Swift 版本?也许您必须为 Swift 2.3 设置遗留值? stackoverflow.com/questions/39490507/…
  • swift 3,这是我的代码: override func didPressSend(_ button: UIButton!, withMessageText text: String!, senderId: String!, senderDisplayName: String!, date: Date!) { let newMessageRef = messageRef.child(roomId).childByAutoId() let mes = ["text": text, "senderId": senderId, "senderName": senderDisplayName, "MediaType": "text"] newMessageRef.setValue(mes) self.finishSendingMessage( ) }
  • 我正在使用 jsqmessageviewcontroller

标签: ios firebase firebase-realtime-database swift3


【解决方案1】:

我有同样的错误。 这就是我修复它的方法:

我的代码有错误:

    var videoInfoDic: Dictionary<String, Any?>?

我是如何解决的:

    var videoInfoDic: Dictionary<String, Any>?

去掉了可选部分。归功于: https://stackoverflow.com/a/39486888/5792500

【讨论】:

  • 我使用 String as 解决了这个问题!我上传到 Firebase 数据库中的 NSString,在 DidPressSend 按钮中
【解决方案2】:

我一直在研究同一个 JSQMessage 库,将您的按钮代码更改为这个,我已经修复了,让我知道它是怎么回事

var messageRef = FIRDatabase.database().reference().child("messages")


override func didPressSend(_ button: UIButton!, withMessageText text:   String!, senderId: String!, senderDisplayName: String!, date: Date!) {

    let newMessage = messageRef.childByAutoId()

    let messageData: Dictionary<String, Any>? = ["text": text, "senderId": senderId, "senderName": senderDisplayName, "mediaType": "TEXT"]

     newMessage.setValue(messageData)

}

我添加了字典?在我的按钮操作中的第二行代码上解决问题

【讨论】:

  • 我使用 String as 解决了这个问题!我上传到 Firebase 数据库中的 NSString,在 DidPressSend 按钮中
【解决方案3】:

它也适用于 JSQMessage!!!

var messageRef = FIRDatabase.database().reference().child("messages")

let newMessage = messageRef.childByAutoId()
let messageData: Dictionary<String, Any>? = ["text": text, "senderId": senderId, "senderName": senderDisplayName, "mediaType": "TEXT"]
newMessage.setValue(messageData)

【讨论】:

  • 我使用 String as 解决了这个问题!我上传到 Firebase 数据库中的 NSString,在 DidPressSend 按钮中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
相关资源
最近更新 更多