6
这是我的Firebase& swift项目的一部分。每次我尝试调用message.setValuesForKeys(字典)时都会崩溃。
来自控制台的错误消息是
由于未捕获的异常终止应用程序' NSUnknownKeyException',原因:' [setValue:forUndefinedKey:]:此类不是密钥值编码兼容的密钥toId
我检查了字典,它有我想要的数据。我不知道还能检查什么。我试图改变" snapshot.value" to" snapshot.children.allobjects"但是随着这种变化,我无法访问我的字典中的数据。
答案 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
}
}