我正在尝试使用数组填充 UITableView,但我无法这样做。这是我到目前为止所拥有的。此代码用于检索数据并将其存储在我用来填充 UITableView 的数组中:
func prepareForRetrieval() {
Database.database().reference().child("UserCart").child(Auth.auth().currentUser!.uid).observe(.value, with: {
(snapshot) in
for snap in snapshot.children.allObjects {
let id = snap as! DataSnapshot
self.keyArray.append(id.key)
}
self.updateCart()
})
}
func updateCart() {
for key in keyArray {
Database.database().reference().child("UserCart").child(Auth.auth().currentUser!.uid).child(key).observeSingleEvent(of: .value, with: {
(snapshot) in
let value = snapshot.value as? NSDictionary
let itemName = value?["Item Name"] as! String
let itemPrice = value?["Item Price"] as! Float
let itemQuantity = value?["Item Quantity"] as! Int
self.cartArray.append(CartData(itemName: itemName, itemQuantity: itemQuantity, itemPriceNumber: itemPrice))
print(self.cartArray.count)
})
}
}
数据已正确附加到数组中,当我打印数组的计数时,它会打印正确的计数。这意味着数据在那里。但是,当我尝试填充 UITableView 时,它没有检测到任何数据。在尝试填充 UITableView 之前,我有以下代码来确保数组中有数据:
override func viewDidLoad() {
super.viewDidLoad()
cartBrain.prepareForRetrieval()
if cartBrain.cartArray.isEmpty == false{
tableViewOutlet.dataSource = self
tableViewOutlet.reloadData()
}
else {
tableViewOutlet.isHidden = true
tableViewOutlet.isUserInteractionEnabled = false
purchaseButtonOutlet.isEnabled = false
cartEmptyLabel.text = "Your cart is empty. Please add items and check back later."
}
}
当我打开 View Controller 时,TableView 被禁用,因为它没有检测到任何数据。我已经将数据源设置为 self,问题是当打印数组的计数时,它会再次打印正确的数量。我已经将 UITableView 的数据源设置为 self。这是我的 UITableView 代码:
extension CartViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return cartBrain.cartArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cartcustomcell", for: indexPath)
cell.textLabel?.text = cartBrain.cartArray[indexPath.row].itemName
cell.detailTextLabel?.text = String(cartBrain.cartArray[indexPath.row].itemQuantity)
return cell
}
}
我不明白为什么数组的计数打印出正确的数量,这意味着其中存储了数据,但是当加载视图控制器时,它检测到数组为空。感谢您的帮助,如果问题有点不清楚,我很抱歉。