我已经多次看过这个问题,但似乎无法弄清楚如何使用这些答案来解决我的代码中的问题。这是我正在使用的当前代码:
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类型的对象。'
答案 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?]