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

Ios 在Firebase中保存多个值时出现InvalidFirebaseData错误,ios,swift,firebase,firebase-realtime-database,swift3,Ios,Swift,Firebase,Firebase Realtime Database,Swift3,下面的代码曾经运行良好,我能够将多个值保存到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

下面的代码曾经运行良好,我能够将多个值保存到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网站上的文档。我做错了什么

谢谢

试试看:-

 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格式。

请尝试:-

 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格式。

我刚刚遇到了这个问题,经过几个小时的反复思考,我想我已经找到了解决方案

看起来Firebase希望您在使用Swift 3时能够非常具体地使用数据类型

你需要直截了当地告诉斯威夫特你将拥有什么样的词典。在这种情况下,可能是

let toBePosted : Dictionary<String, Any> = ["postedBy": String(self.currentUser!.uid),
                "mood": String(mood), "status": String(status),    
                "date": String(convertedDate)]
让toBePosted:Dictionary=[“postedBy”:字符串(self.currentUser!.uid),
“情绪”:字符串(情绪),“状态”:字符串(状态),
“日期”:字符串(转换日期)]
我认为“任何”在Swift 3中都是新事物。AnyObject在这里不起作用,因为Swift重新定义了AnyObject是什么,字符串/整数似乎不再是它们了

最后,似乎你的字典里绝对没有选项。也许一个可选的是一个SwiftValue?一旦我摆脱了期权,并夸耀每一个价值都会出现在那里,它就开始对我起作用了


这对我来说很有效,如果你还有问题,请告诉我。

我刚刚遇到了这个问题,在玩了几个小时后,我想我找到了解决办法

看起来Firebase希望您在使用Swift 3时能够非常具体地使用数据类型

你需要直截了当地告诉斯威夫特你将拥有什么样的词典。在这种情况下,可能是

let toBePosted : Dictionary<String, Any> = ["postedBy": String(self.currentUser!.uid),
                "mood": String(mood), "status": String(status),    
                "date": String(convertedDate)]
让toBePosted:Dictionary=[“postedBy”:字符串(self.currentUser!.uid),
“情绪”:字符串(情绪),“状态”:字符串(状态),
“日期”:字符串(转换日期)]
我认为“任何”在Swift 3中都是新事物。AnyObject在这里不起作用,因为Swift重新定义了AnyObject是什么,字符串/整数似乎不再是它们了

最后,似乎你的字典里绝对没有选项。也许一个可选的是一个SwiftValue?一旦我摆脱了期权,并夸耀每一个价值都会出现在那里,它就开始对我起作用了


这对我很有效,如果您仍然有问题,请告诉我。

什么类型的
情绪
,您在哪里以及如何声明它?什么类型的
情绪
,您在哪里以及如何声明它?仍然收到错误。你认为是因为我几个月没更新pod吗?我有
import Firebase
,但我在文档中看到,我们现在需要使用单独的pod,如
import Firebase/Database
,或者我正在使用Firebase(3.3.0)的东西。对不起,我没有机会。我一到家就会尝试更新播客。您知道从3.3.0升级时是否有语法更改吗?我担心它可能会破坏我的应用程序。更糟糕的是,我运行了pods更新,但它仍然给出了一个错误。不过我觉得有点不对劲。最新更新我的视图控制器顶部仍然有
import Firebase
。如果我尝试使用
import FirebaseDatabase
,我会得到段故障11错误。就好像它还在尝试使用旧版本。我可能会卸载/重新安装FirebaseOK,我重新安装,然后将
导入Firebase
更改为
导入FirebaseDatabase
。现在,我发现您在上面提供的解决方案有一个错误<代码>上下文类型“Any”不能与字典文本一起使用仍在获取错误。你认为是因为我几个月没更新pod吗?我有
import Firebase
,但我在文档中看到,我们现在需要使用单独的pod,如
import Firebase/Database
,或者我正在使用Firebase(3.3.0)的东西。对不起,我没有机会。我一到家就会尝试更新播客。您知道从3.3.0升级时是否有语法更改吗?我担心它可能会破坏我的应用程序。更糟糕的是,我运行了pods更新,但它仍然给出了一个错误。不过我觉得有点不对劲。最新更新我的视图控制器顶部仍然有
import Firebase
。如果我尝试使用
import FirebaseDatabase
,我会得到段故障11错误。就好像它还在尝试使用旧版本。我可能会卸载/重新安装FirebaseOK,我重新安装,然后将
导入Firebase
更改为
导入FirebaseDatabase
。现在,我发现您在上面提供的解决方案有一个错误<代码>上下文类型“Any”不能与字典文本一起使用