将firebase数据放入数组

时间:2017-12-14 17:17:29

标签: ios swift firebase firebase-realtime-database

我正在尝试从firebase中检索数据。但有些如何不起作用。在这里我做了什么。

这是我的firebase数据库

here is my database from 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:]:   这个类不是关键电话的关键值编码兼容。

1 个答案:

答案 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()