【问题标题】:can't reload Array<any>? data from firebase to Table View swift无法重新加载 Array<any>?从 firebase 到 Table View swift 的数据
【发布时间】:2020-10-01 11:34:24
【问题描述】:

我的数据模型:

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

}

我的视图控制器:

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
}

我的数据库:

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

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

func  upDatekey() {

    keyOUtLet.text = key?.key
}

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

因为我的数据库键值是数组,所以我这样设置:

var key : Array<Any>? 

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

【问题讨论】:

    标签: arrays swift xcode firebase-realtime-database tableview


    【解决方案1】:

    我解决了问题,

    我的 firebase 数据库节点是一个 Int 数组,所以我必须将我的对象转换为 [String],而不是通过 arrya 循环以提取 kyes

    if let key = dict["key"]  as? [String] {
                        for keys in key {
                            print(keys)
                        }
    

    比我加载它到表视图。它工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多