使用 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.

,编译器将在 编译时 抛出一个错误