Мое первое предположение: у одного из ваших узлов Firebase есть ключ, которого нет в вашем классе
Завершение работы приложения из-за необработанного исключения «NSUnknownKeyException», причина: «[setValue: forUndefinedKey:]: этот класс не совместим с кодированием значения ключа для ключа toId
^^^^
Это хорошая подсказка.
Проверьте все узлы в вашей базе данных и убедитесь, что у них всех есть ключ 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
}
}