使用 firebase 和 NSobject 的 NSUnknownKeyExeption
NSUnknownKeyExeption using firebase and NSobject
2018-12-30 15:01:23.228731+0200 iChat[51679:726127] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key username.'
(lldb)
使用 firebase 字典为 NSobject 的键设置值 class
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)
}
}
}
Objective-C 推断已在 Swift 中更改 4. 您必须将 @objc
属性添加到每个 属性
class User: NSObject {
@objc var email: String?
@objc var username: String?
}
但是 setValuesForKeys
非常 objective-c-ish。在没有繁重的 ObjC 运行时的情况下,Swift 中有更好(更轻量级)的方法。
为什么这两个属性都是可选的?是否允许没有姓名和电子邮件的用户?
考虑到如果您要传递 nil
.
,编译器将在 编译时 抛出一个错误
2018-12-30 15:01:23.228731+0200 iChat[51679:726127] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key username.' (lldb)
使用 firebase 字典为 NSobject 的键设置值 class
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)
}
}
}
Objective-C 推断已在 Swift 中更改 4. 您必须将 @objc
属性添加到每个 属性
class User: NSObject {
@objc var email: String?
@objc var username: String?
}
但是 setValuesForKeys
非常 objective-c-ish。在没有繁重的 ObjC 运行时的情况下,Swift 中有更好(更轻量级)的方法。
为什么这两个属性都是可选的?是否允许没有姓名和电子邮件的用户?
考虑到如果您要传递 nil
.