不调用索引路径行的空tableview单元格

时间:2017-09-23 23:56:35

标签: ios arrays swift uitableview

所有tableview函数都在工作,但行索引路径的单元格除外。

问题可能是food数组为空,因此行数为0,因此不会调用索引路径中行的单元格

@IBOutlet weak var foooods: UITableView!
var databaseref = Database.database().reference()
var img : AnyObject?
var foods = [String?]()

override func viewDidLoad() {
    super.viewDidLoad()

    self.databaseref.child("basic food").observe(.childAdded, with: {( snap: DataSnapshot) in
        let snapp = snap.value as! [String:AnyObject]
        if let x = snapp["name"] as! String? {
            self.foods.insert(x, at: 0)
            //self.foods.append(x)
        }
    })
    self.foooods.reloadData()
}

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.foods.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    print("difufuehf")
    let cell : foodsTableViewCell = tableView.dequeueReusableCell(withIdentifier: "aupa", for:indexPath) as! foodsTableViewCell
    print("fufvksdfvysdgfvjdsgfdsygfvds,jhvjsdvsdjvguydsfgdsylfgdsyfgsdlygfsiygf")
    if let foo =  foods[indexPath.row]  {
        print(foo)
        cell.food.text = foo
    }
    return cell
}

1 个答案:

答案 0 :(得分:1)

这必须是重复的,但我找不到。

您的问题是,您在错误的地方致电reloadData,导致其过早被调用。更新数据模型后,需要在完成块内调用它。

你需要确保它在主队列中被调用。

override func viewDidLoad() {
    super.viewDidLoad()

    self.databaseref.child("basic food").observe(.childAdded, with: {( snap: DataSnapshot) in
        if let snapp = snap.value as? [String:Any], let x = snapp["name"] as? String {
            self.foods.insert(x, at: 0)
            //self.foods.append(x)

            DispatchQueue.main.async {
                self.foooods.reloadData()
            }
        }
    })
}

请注意,我还修复了获取值的方式。你真的需要避免强行展开和强制施放。