Swift 3 Firebase - (setValue :)无法在内容中存储_SwiftValue类型的对象

时间:2016-10-09 03:12:56

标签: ios swift firebase firebase-realtime-database swift3

我已经多次看过这个问题,但似乎无法弄清楚如何使用这些答案来解决我的代码中的问题。这是我正在使用的当前代码:

if let postContent = postAlert.textFields?.first?.text {
    let post = Post(content: postContent, addedByUser: "Max Kortge")

    let postRef = self.dbRef.child(postContent.lowercased())

    postRef.setValue(post.toAnyObject()) //error here
}

我认为控制台中的错误意味着我在这里评论'错误'的行。

toAnyObject的方法如下:

func toAnyObject() -> Any {
    return ["content":content, "addedByUser":addedByUser] as Any
}

完整的控制台错误如下:

  

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

3 个答案:

答案 0 :(得分:7)

使用版本3.12.0我得到了无法存储_SwiftValue类型的对象错误,即使我确定我发送的是NSString而不是swift字符串。我做错了是完成块的格式。我改变了这个:

ref.child("data").setValue("str")  {
    print("done")
}

到此:

ref.child("data").setValue("str")  { err, ref in
    print("done")
}

必须是一个错误,我期望在未来的firebase版本中有更好的错误消息。

答案 1 :(得分:2)

尝试更改: -

func toAnyObject() -> Any {
  return ["content":content, "addedByUser":addedByUser] as Any
 }

func toAnyObject() -> [AnyHashable:Any] {
  return ["content":content, "addedByUser":addedByUser] as [AnyHashable:Any]
 }

答案 2 :(得分:1)

确保代码中的'post'是[String:String]而不是[String:String?]