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)
}
}
}
答案 0 :(得分:0)
在Swift 4中,Objective-C推理已更改。您必须为每个属性添加@objc
属性
class User: NSObject {
@objc var email: String?
@objc var username: String?
}
然而,setValuesForKeys
非常客观。在没有繁重的ObjC运行时的情况下,Swift中有更好(更轻量)的方法。
为什么两个属性都是可选的?是否允许用户输入姓名和电子邮件?
请考虑使用非可选选项,如果您要传递nil
,则编译器会在编译时引发错误。