在Firebase

时间:2016-09-08 23:18:40

标签: 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 NSNumber, NSString, NSDictionary, and NSArray.'

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:0)

尝试: -

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

答案 1 :(得分:0)

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

看起来Firebase希望您对使用Swift 3的数据类型非常具体。

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

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

&#34;任何&#34;我认为是Swift 3中的新东西。 AnyObject在这里不起作用,因为Swift重新定义了AnyObjects,而Strings / Ints似乎不再是它们了。

最后,似乎就像你必须在字典中完全没有选项一样。也许一个可选的_SwiftValue?一旦我摆脱了选择权并且贪得无厌,每个价值都将在那里开始为我工作。

这对我有用,请告诉我你是否还有问题。