无法重新加载Array ?从Firebase到表视图的快速数据

问题描述 投票:0回答:1

我的数据模型:

class KeyModell {
var UserID : String?
var key : Array<Any>?
init(UserIDString : String , keyString : Array<Any>? ) {
    UserID = UserIDString
    key = keyString
}

}

我的ViewContoller:

class ViewController: UIViewController {
var userID = ""
var keyContiner = [KeyModell]()

@IBOutlet weak var tableViewOutLet: UITableView!
@IBOutlet weak var textFeildOUtLet: UITextField!
override func viewDidLoad() {
    super.viewDidLoad()
    FetchUsers(userID: userID) { (user) in
    //    print("userID His Profile \(user.id)")
    }
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    fetchKey()

    tableViewOutLet.reloadData()
}
@objc func fetchKey () {

    Database.database().reference().child("AdminKeys").observeSingleEvent(of: .value) { (snapshot) in
       // print(snapshot.value)

        for child in snapshot.children.allObjects as! [DataSnapshot] {
            if let dict = child.value as? [String : Any] {
               // print(dict)
                let userID = dict["UserID"] as! String
                if let keyID = dict["key"] as! Array<Any>? {
                        let key = KeyModell.init(UserIDString: userID, keyString: keyID)
                    self.keyContiner.append(key)
                    self.tableViewOutLet.reloadData()
                }

                self.tableViewOutLet.reloadData()

            }
        }

}

 func FetchUsers (userID : String , Compation : @escaping (UserModel)->Void) {
    Database.database().reference().child("Users").child(userID).observe(.childAdded) { (snapshot) in
        if let dic = snapshot.value as? [String : Any] {
            let user = UserModel.TransferUserModel(dic: dic, key: snapshot.key)
            Compation(user)
        }
    }
}


@IBAction func saveKeybtn(_ sender: Any) {

    let keyString : String = textFeildOUtLet.text!
    let keys = keyString.components(separatedBy: ",")
    let ref : DatabaseReference!
    ref = Database.database().reference()
    let AdminKeysREF = ref.child("AdminKeys")
    let newKeysPostID = AdminKeysREF.childByAutoId()
    guard let userID = Auth.auth().currentUser else {return}
    let userKeyId = userID.uid
    newKeysPostID.setValue(["UserID": userKeyId ,  "key" : keys] )

}

extension ViewController : UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return keyContiner.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell  = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! KeyCell


    return cell

}

我的手机:

class KeyCell: UITableViewCell {

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

@IBOutlet weak var keyOUtLet: UILabel!
var key : KeyModell?{
    didSet {
        upDatekey()
    }
}

func  upDatekey() {

    keyOUtLet.text = key?.key
}


override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

我的数据库:

my database tree

当我打印(cell.key)时,它给我结果:

问题是,当我尝试将标签设置为这样的关键模式时:

func  upDatekey() {

    keyOUtLet.text = key?.key
}

它给我错误“无法分配'[Any]类型的值?”键入“字符串?”]

由于我的数据库键值为Array,所以我将其设置为:

var key : Array<Any>? 

我认为这里的问题我无法解决

arrays swift xcode firebase-realtime-database tableview
1个回答
0
投票

我解决了问题,

© www.soinside.com 2019 - 2024. All rights reserved.