Snapshot.value在setValueForKeys上崩溃

时间:2018-04-28 15:10:19

标签: swift firebase firebase-realtime-database

6

这是我的Firebase& swift项目的一部分。每次我尝试调用message.setValuesForKeys(字典)时都会崩溃。

来自控制台的错误消息是

  

由于未捕获的异常终止应用程序' NSUnknownKeyException',原因:' [setValue:forUndefinedKey:]:此类不是密钥值编码兼容的密钥toId

我检查了字典,它有我想要的数据。我不知道还能检查什么。我试图改变" snapshot.value" to" snapshot.children.allobjects"但是随着这种变化,我无法访问我的字典中的数据。

1 个答案:

答案 0 :(得分:1)

我的第一个猜测是你的一个firebase节点有一个在你的类中不存在的键

由于未捕获的异常终止应用程序' NSUnknownKeyException',原因:' [setValue:forUndefinedKey:]:此类不是密钥值编码兼容的密钥toId

                                                                      ^^^^

这是一个很好的线索。

检查您的firebase中的节点,确保它们都有一个键toId,并且您的类也有一个toId属性。

不匹配的密钥会导致此问题。

另外,如果你想使用setObjectForValue,Message对象应该继承自NSObject(符合键值编码)

  

对象通常在继承时采用键值编码   NSObject(直接或间接),均采用   NSKeyValueCoding协议并提供默认实现   基本方法

如果您已经检查过以确保您的密钥都匹配,则可能是Message对象的定义方式。它应该看起来像这样,确保它是一个NSObject,键(属性)以 @objc

开头
class Message: NSObject {
    @objc var name = ""
    @objc var toId = ""
}

我的最后一个建议是让你的代码变得更好,而不是依赖于NSObject。

class Message {
  var name = ""
  var toId = ""
  func initMessageWithSnap(aSnapshot: Snapshot) {
      //desconstuct the snapshot and assign the vars
  }
}