Ich habe eine Tabellenansicht, die ein Array auffüllt. Ich kann zu Firebase hinzufügen und die Tabellenansicht neu laden, um das neu hinzugefügte Objekt anzuzeigen. Wenn ich 5 Gegenstände in Firebase habe, dann hätte ich 5 auf dem Tisch. Ich bin in der Lage, Elemente von Firebase durch Code zu entfernen und die Tabellenansicht neu zu laden, und es funktioniert gut.Swift Firebase TableView kann das letzte Element nicht entfernen
Mein Problem ist, wenn ich auf dem letzten Element auf firebase und tableview bin und ich lösche das letzte Element, die Firebase entfernt es ganz gut, aber die Tabellenansicht behält das letzte Element, aber es grau aus.
Die App nicht abstürzen es dort nicht nur bleibt, bis ich etwas hinzufügen, wieder in.
Natürlich, wenn ich auf dieser abgeblendet Zelle stürzt meine App tippen, weil ich einen Index außerhalb des zulässigen Bereichs am tippen.
Gibt es Code, den ich hinzufügen muss, um diese ausgegraute Zelle zu verhindern und nur eine leere Tabellenansicht zu haben?
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return serviceArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "serviceCell", for: indexPath as IndexPath) as! ServiceTableViewCell
let row = indexPath.row
// cell.serviceLogoImage.image = UIImage.init(named: serviceArray[row].serviceUrl!)
cell.serviceNameLabel.text = serviceArray[row].serviceName
if serviceArray[row].serviceStatus == true {
cell.serviceStatusView.backgroundColor = .green
} else {
cell.serviceStatusView.backgroundColor = .red
}
return cell
}
Ich muss eine kleine Bedingung fehlt, weil anders als dies der Tableview perfekt mit Feuerbasis arbeitet ...
bearbeiten 1
ich den Code hinzugefügt haben, verwendet um die Tabellenansicht zu füllen
var serviceArray: [ServiceClass] = []
func pullCardData() {
serviceArray.removeAll()
let cardRef = ref.child("cards")
cardRef.observeSingleEvent(of: .value, with: { snapshot in
for cards in snapshot.children {
let allCardIDs = (cards as AnyObject).key as String
if allCardIDs == self.cardID {
let thisCardLocation = cardRef.child(self.cardID)
thisCardLocation.observeSingleEvent(of: .value, with: { snapshot in
let thisCardDetails = snapshot as FIRDataSnapshot
let cardDict = thisCardDetails.value as! [String: AnyObject]
self.selectedCard.cardID = thisCardDetails.key
self.selectedCard.nickname = cardDict["nickname"] as! String
self.selectedCard.type = cardDict["type"] as! String
self.cardNickNameLabel.text = cardDict["nickname"] as? String ?? ""
let thisCardServices = self.ref.child("cards").child(self.cardID).child("services")
let serviceRefLoc = self.ref.child("services")
thisCardServices.observeSingleEvent(of: .value, with: {serviceSnap in
if serviceSnap.hasChildren() {
for serviceChild in serviceSnap.children {
let serviceID = (serviceChild as AnyObject).key as String
serviceRefLoc.observeSingleEvent(of: .value, with: {allServiceSnap in
if allServiceSnap.hasChildren() {
for all in allServiceSnap.children {
let allServs = (all as AnyObject).key as String
let thisServiceLocationInServiceNode = self.ref.child("services").child(serviceID)
if serviceID == allServs {
thisServiceLocationInServiceNode.observeSingleEvent(of: .value, with: {thisSnap in
let serv = thisSnap as FIRDataSnapshot
let serviceDict = serv.value as! [String: AnyObject]
let aService = ServiceClass()
self.serviceCurrent = serviceDict["serviceStatus"] as? Bool
self.serviceName = serviceDict["serviceName"] as? String
self.serviceURL = serviceDict["serviceURL"] as? String
self.serviceFixedBool = serviceDict["serviceFixed"] as? Bool
self.serviceFixedAmount = serviceDict["serviceAmount"] as? String
aService.serviceUrl = serviceDict["serviceURL"] as! String
aService.serviceName = serviceDict["serviceName"] as! String
aService.serviceStatus = serviceDict["serviceStatus"] as? Bool
aService.serviceID = serviceID
self.serviceArray.append(aService)
self.tableView.reloadData()
})
}
}
}
})
}
}
})
})
}
}
})
}
Edit 2
hatte ich die Idee zu prüfen, ob die Feuerbasis Knoten auch Exits (sollte es nicht, da ich es einfach gelöscht. SO
func checkIfDataExits() {
ref.observeSingleEvent(of: .value, with: { snapshot in
if snapshot.hasChild("services") {
self.pullCardData()
} else {
self.tableView.endUpdates()
print("no childen")
}
})
}
Wie erwartet, da ich mehr da nicht die Feuerbasis Knoten haben druckt es „keine Kinder“, aber es zeigt immer noch die letzte Zelle Tableview .... so
Können Sie uns den Code zeigen, dass Ihr serviceArray füllt bitte? – Grifas
@Grifas, ja, eine Sekunde erlauben Sie mir, die Frage zu bearbeiten – RubberDucky4444
Welche Firebase-Methode verwenden Sie, um Daten von Firebase zu holen? – Grifas