我正在尝试从firebase中检索数据。但有些如何不起作用。在这里我做了什么。
这是我的firebase数据库
这是我的对象类
class UserObj: NSObject {
var address: String?
var name: String?
var phone: String?
var userId: String?
}
//这是我的viewController类
var refhandel:DatabaseHandle!
var ref:DatabaseReference!
var proModel = [UserObj]()
override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference()
getProfileD()
}
func getProfileD(){
refhandel = ref.child("users").observe(.childAdded, with: { (snapshot) in
if let item = snapshot.value as? [String: AnyObject]{
let user = UserObj()
user.setValuesForKeys(item)
self.proModel.append(user)
for i in self.proModel {
print(i)
}
}
})
}
我收到此错误
由于未捕获的异常'NSUnknownKeyException'而终止应用, 原因:'[setValue:forUndefinedKey:]: 这个类不是关键电话的关键值编码兼容。
答案 0 :(得分:0)
我不确定错误来自哪里,但这是另一种在Firebase中检索数据的方法,我测试过并使用过。
对于您的模型,您可以使用DataSnapshot
struct UserObj {
var address: String?
var name: String?
var phone: String?
var userId: String?
init(snapshot: DataSnapshot) {
ref = snapshot.ref
key = snapshot.key
let snapshotValue = snapshot.value as ! [String: AnyObject]
address = snapshot[address] as! String
name = snapshot[name] as! String
phone = snapshot[phone] as! String
userId = snapshot[userId] as! String
}
}
在您的功能中,您可以更改为:
ref = Database.database().reference()
ref.observe(.childAdded, with: { snapshot in
var newItems: [UserObj] = []
for item in snapshot.children {
let userObjItem = UserObj(snapshot: item as! FIRDataSnapshot)
newItems.append(userObjItem)
}
self.proModel = newItems
self.tableView.reloadData()