所以我有这段代码假设从数据库中获取用户并将它们存储在一个数组(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'
有什么想法吗?
答案 0 :(得分:1)
......我修好了。
更换
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
答案 1 :(得分:1)
错误unrecognized selector sent to instance
表示您尝试将密钥设置为错误类型的值。从您的代码中不清楚对象User
是什么类型,或dictionary
对象中有哪些键,但其中一个值不是User
的类型期待那把钥匙。
要修复它,您需要将字典中的每个值转换为正确的类型。