Ich bin ziemlich neu im Bereich der Codierung und ich versuche, TableView mit Firebase zu implementieren. Was ich versuche zu erreichen ist zu:Firebase + Swift: Löschen von Zeilen in Tabelle nicht möglich
- eine Seite ‚Einstellungen‘ Create Tableview mit denen Benutzer eingegeben ihre Lieblingslocation
- Erstellen Sie ein Formular (ich benutze Eureka hier) für Benutzer bestimmte Optionen aus dem holen Favoriten sie Eingang in den Einstellungen
- zulassen Löschung dieser Reihenfolge ‚Favoriten‘
in für die Formen zu arbeiten, habe ich die Firebase Daten bei AppDelegate durch user.uid gefiltert ziehen. um diese 'Favoriteneinstellungen' zu füllen. Wenn ich versuche, Zeilen mit commitEdittingStyle in den 'Einstellungen' zu löschen, wird der Fehler mit der ungültigen Anzahl von Zeilen ausgegeben. Ich habe versucht, verschiedene Lösung zu googeln und versuchte auch dispatch_async, aber es löst irgendwie nicht ganz mein Problem. Einige Schnipsel meines Codes wie folgt:
public var setUpFavLocations: [(String)] = []
public var favLocDatabase: [FIRDataSnapshot]! = []
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var ref: FIRDatabaseReference!
var _refHandle: FIRDatabaseHandle!
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
FIRApp.configure()
let favLocVC: UITableViewController = FavLocationsTableViewController(style: UITableViewStyle.Plain)
ref = FIRDatabase.database().reference()
if let user = FIRAuth.auth()?.currentUser {
self.ref.child("settings").queryOrderedByChild("user").queryEqualToValue(user.uid).observeEventType(.ChildAdded, withBlock: { (snapshot) in
favLocDatabase.append(snapshot)
let insertionIndexPath = NSIndexPath(forRow: favLocDatabase.count - 1, inSection: 0)
favLocVC.tableView.insertRowsAtIndexPaths([insertionIndexPath], withRowAnimation: .Automatic)
})
self.ref.child("settings").queryOrderedByChild("user").queryEqualToValue(user.uid).observeEventType(.ChildAdded, withBlock: { (snapshot) in
setUpFavLocations.append(snapshot.value?["favLocation"] as! String)
})
//At FavLocationsTableViewController, aka at the settings page
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("count \(setUpFavLocations.count)")
return setUpFavLocations.count
}
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
if let user = FIRAuth.auth()?.currentUser {
let row = favLocDatabase[indexPath.row]
self.ref.child("settings").queryOrderedByChild("user").queryEqualToValue(user.uid).observeEventType(.ChildRemoved, withBlock: { (snapshot) -> Void in
favLocDatabase.removeAtIndex(indexPath.row)
self.tableView.deleteRowsAtIndexPaths([NSIndexPath(forRow: indexPath.row, inSection: 0)], withRowAnimation: .Automatic)
})
row.ref.removeValue()
}
}
}
Dadurch wirft mir die folgende Fehler
beenden app aufgrund nicht abgefangene Ausnahme
‚NSInternalInconsistencyException‘ Grund: ‚Ungültige Update: ungültige Anzahl der Zeilen in Abschnitt 0. Die Anzahl der Zeilen in einem vorhandenen Abschnitt nach der Aktualisierung (5) muss gleich der Anzahl der Zeilen in diesem Abschnitt vor dem Update (5) sein, plus oder minus die Anzahl der Zeilen eingefügt oder d aus diesem Abschnitt (0 eingefügt, 1 gelöscht) und plus oder minus die Anzahl der Zeilen in oder aus dieser Abschnitt (0 eingezogen, 0 ausgezogen). '
Pls Hilfe, ich bin ziemlich fest hier seit Tagen. Sehr geschätzt.
Warte, hast du nicht gesagt, dass du Eureka benutzt? Warum nicht Eureka auch hier benutzen? Es ist _much_ einfacher! – Sweeper
@Sweeper Ich kann keine Eureka-Zelle finden, die am besten zu diesem Zweck passt. – Koh
Könnte es sein, dass Sie das Objekt zweimal aus der Datenbank entfernen ('removeAtIndex' und' removeValue')? Und warum erstellen Sie einen neuen Indexpfad, anstatt nur den (tatsächlich gleichen) Pfad zu verwenden, der im Parameter übergeben wurde? – vadian