使用Firebase和NSobject的NSUnknownKeyExeption

时间:2018-12-30 13:10:33

标签: swift firebase nsunknownkeyexception

  

2018-12-30 15:01:23.228731 + 0200 iChat [51679:726127] ***由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[setValue:forUndefinedKey:]:此类不是键值符合密钥用户名的编码要求。”   (lldb)

使用firebase字典为NSobject类的键设置值

import UIKit

class User: NSObject {
var email: String?
var username: String?
}

功能

func fetchUsers() {
    Database.database().reference().child("users").observe(.childAdded) { (snap) in
        if let dictionary = snap.value as? [String : AnyObject]{
        let user = User()
            user.setValuesForKeys(dictionary)
            print(user.username)
        }
    }
}

1 个答案:

答案 0 :(得分:0)

在Swift 4中,Objective-C推理已更改。您必须为每个属性添加@objc属性

class User: NSObject {
   @objc var email: String?
   @objc var username: String?
}

然而,setValuesForKeys非常客观。在没有繁重的ObjC运行时的情况下,Swift中有更好(更轻量)的方法。

为什么两个属性都是可选的?是否允许用户输入姓名和电子邮件?

请考虑使用非可选选项,如果您要传递nil,则编译器会在编译时引发错误。