【问题标题】:Swift 3 Firebase - (setValue:) Cannot store object of type _SwiftValue at contentSwift 3 Firebase - (setValue:) 无法在内容中存储 _SwiftValue 类型的对象
【发布时间】:2017-02-17 18:35:41
【问题描述】:

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

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 类型的对象。'

【问题讨论】:

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


    【解决方案1】:

    尝试改变:-

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

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

    【讨论】:

    • 两者一模一样?
    【解决方案2】:

    使用版本 3.12.0 我得到 Cannot store object of type _SwiftValue 错误,即使我确定我发送的是 NSString 而不是 swift 字符串。我做错的是完成块的格式。我改变了这个:

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

    到这里:

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

    一定是一个错误,我希望在未来的 firebase 版本中出现更好的错误消息。

    【讨论】:

    • 我搜索了几个小时.. 非常感谢。示例中的错误
    【解决方案3】:

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

    【讨论】:

    • 这个答案没有意义。你是说post 应该是一样的。我认为您的答案中有错字。请更正。
    猜你喜欢
    • 1970-01-01
    • 2017-01-21
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 2017-11-09
    • 2017-01-31
    相关资源
    最近更新 更多