【问题标题】:NSUnknownKeyExeption using firebase and NSobjectNSUnknownKeyExeption 使用 firebase 和 NSobject
【发布时间】:2018-12-30 13:10:33
【问题描述】:

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)
        }
    }
}

【问题讨论】:

    标签: swift firebase nsunknownkeyexception


    【解决方案1】:

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

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

    但是setValuesForKeys 非常objective-c-ish。 Swift 中有更好(和更轻量级)的方法,无需繁重的 ObjC 运行时。

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

    如果您要传递nil,请考虑使用非可选参数,编译器将在编译时抛出错误。

    【讨论】:

    • 在没有繁重的 ObjC 运行时的情况下,Swift 中有更好(和更轻量级)的方法。你能举个我的例子吗
    • Codable 协议或仅用于少数属性的初始化器,它手动映射每个值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多