在 Firebase 中保存多个值时出现 InvalidFirebaseData 错误

Posted

技术标签:

【中文标题】在 Firebase 中保存多个值时出现 InvalidFirebaseData 错误【英文标题】:InvalidFirebaseData error when saving multiple values in Firebase 【发布时间】:2016-09-08 23:18:39 【问题描述】:

以下代码曾经运行良好,我能够将多个值保存到 Firebase 记录。但是,自从升级到 Swift 3 (Xcode 8) 后,这不再有效。我现在收到以下错误:

*** Terminating app due to uncaught exception 'InvalidFirebaseData', reason: '(setValue:) Cannot store object of type _SwiftValue at mood. Can only store objects of type NSNumber, NSString, NSDictionary, and NSArray.'

上面的错误总是提到第二个值,不管它是什么类型(即使它是支持的类型之一,比如 NSString)。这是我所拥有的:

postsRef.childByAutoId().setValue(["postedBy": self.currentUser?.uid, "mood": mood, "status": status, "date": convertedDate])

这似乎仍然符合 Firebase 网站上的文档。我做错了什么?

谢谢!

【问题讨论】:

mood 是什么类型,你在哪里以及如何声明的? 【参考方案1】:

试试看:-

 let toBePosted = ["postedBy": String(self.currentUser!.uid),
                    "mood": String(mood), "status": String(status),    
                    "date": String(convertedDate)]

 postsRef.childByAutoId().setValue(toBePosted) (error, ref) -> Void in

   

对于转换后的日期,您必须在检索时将其转换为 NSDate 格式。

【讨论】:

仍然出现错误。你认为这是因为我几个月没有更新 pod 了吗?我有 import Firebase,但我在文档中看到我们现在需要使用单独的 pod,例如 import Firebase/Database 或其他东西 我正在使用 Firebase (3.3.0) 对不起,我没有机会。我一回到家就会尝试更新豆荚。您知道从 3.3.0 升级是否有任何语法更改?我担心它可能会进一步破坏我的应用程序 不,我运行了 pods update ,但它仍然报错。我觉得有些不对劲。最新的更新我的视图控制器顶部仍然只有import Firebase。如果我尝试使用import FirebaseDatabase,我会收到段错误 11 错误。就像它仍在尝试使用旧版本一样。我可能会卸载/重新安装 Firebase 好的,我重新安装然后将import Firebase 更改为import FirebaseDatabase。我现在收到您在上面提供的解决方案的错误。 Contextual type 'Any' cannot be used with dictionary literal【参考方案2】:

我刚遇到这个问题,经过几个小时的玩弄,我想我已经找到了解决方案。

Firebase 似乎希望您使用 Swift 3 对您的数据类型非常具体。

你需要直接告诉 Swift 你将拥有什么样的字典。在这种情况下,它可能是

let toBePosted : Dictionary<String, Any> = ["postedBy": String(self.currentUser!.uid),
                "mood": String(mood), "status": String(status),    
                "date": String(convertedDate)]

我认为“Any”是 Swift 3 中的新事物。 AnyObject 在这里不起作用,因为 Swift 重新定义了 AnyObjects 是什么,而 Strings/Ints 似乎不再是它们了。

最后,似乎你的字典中必须绝对没有可选项。也许可选的是_SwiftValue?一旦我摆脱了可选项并保证每个值都会在那里,它就开始为我工作了。

这对我有用,如果您仍有问题,请告诉我。

【讨论】:

以上是关于在 Firebase 中保存多个值时出现 InvalidFirebaseData 错误的主要内容,如果未能解决你的问题,请参考以下文章

Xcode Firebase I 更新 Firebase 数据库值时出现问题

在Firebase中执行文件写入功能时出现EROFS错误。

尝试使用猫鼬和异步保存到数据库时出现多个错误

在 Firebase 中部署功能时出现 Firebase 未找到错误

尝试在 mailchimp 中添加联系人时出现错误 400

为啥在 Vue js 中尝试从 firebase 检索令牌时出现错误?