Swift 3.1 - .setValuesForKeys和Firebase无法检索用户

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift 3.1 - .setValuesForKeys和Firebase无法检索用户相关的知识,希望对你有一定的参考价值。

所以我有这段代码假设从数据库中获取用户并将它们存储在一个Array(drivingUsers)中。我没有错误但是当我运行应用程序时它会崩溃。

 func fetchUser() {
    FIRDatabase.database().reference().child("user_profiles").observe(.childAdded, with: { (snapshot) in

        if let dictionary = snapshot.value as? [String: AnyObject] {
           let user = User()


            user.setValuesForKeys(dictionary) //Error


            self.drivingUsers.append(user)

            DispatchQueue.main.async {
                self.tableView.reloadData()
            }
        }
    }, withCancel: nil)


}

错误日志:

 2017-04-29 00:41:46.842568 VEXI[1745:369755] -[__NSCFNumber length]: unrecognized selector sent to instance 0x174a34500
 2017-04-29 00:41:46.844084 VEXI[1745:369755] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0x174a34500'

有任何想法吗?

答案

错误unrecognized selector sent to instance表示您尝试将键设置为错误类型的值。从你的代码中不清楚User是什么类型的对象,或dictionary对象中有哪些键,但其中一个值不是User期望该键的类型。

要修复它,您需要将字典中的每个值转换为正确的类型。

另一答案

... 我修好了它。

更换

user.setValuesForKeys(dictionary)

user.name = dictionary["name"] as? String
user.email = dictionary["email"] as? String
user.picture = dictionary["picture"] as? String
user.facebookID = dictionary["facebookID"] as? String
user.status = dictionary["status"] as? String
user.date_joined = dictionary["date_joined"] as? String
user.last_login = dictionary["last_login"] as? String
user.Longitude = dictionary["Longitude"] as? String
user.Latitude = dictionary["Latitude"] as? String

以上是关于Swift 3.1 - .setValuesForKeys和Firebase无法检索用户的主要内容,如果未能解决你的问题,请参考以下文章

从 swift 2.3 问题迁移到 swift 3.1

Swift 3.1 的一些新特性

Swift 3.1 的一些新特性

Swift 3.1 中的 CocoaTouch 类

使用 Swift 4.0 编译的模块无法在 Swift 3.1 中导入框架二进制文件

swift 3.1 如何汇总异步获取属性