在 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 数据库值时出现问题