【问题标题】:InvalidFirebaseData error when saving multiple values in Firebase在 Firebase 中保存多个值时出现 InvalidFirebaseData 错误
【发布时间】: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 是什么类型,你在哪里以及如何声明的?

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


【解决方案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?一旦我摆脱了可选项并保证每个值都会在那里,它就开始为我工作了。

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

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2020-10-25
    • 2021-09-19
    • 1970-01-01
    相关资源
    最近更新 更多