2016-07-31 4 views
0

Ich benutzte fmdb SQLite Datenbank Wrapper. Ich bin verwirrt, wenn ich ausgewählte Zeilenlabeltexte bekomme. Meine Verwirrung ist, wenn ich die tableView Reihe wische und lösche, dann wird die ganze Reihe auch von der Datenbank gelöscht, die dieses currentCell.userID.text hat. Also, wie geht das? Danke im Voraus. Code ich versuche haben,Wie Swipe und löschen Sie ausgewählte Tabellenansicht Zeilendaten von SQLite-Datenbank in Swift 2.0?

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 

    let index = tableView.indexPathForSelectedRow 
    let currentCell = tableView.cellForRowAtIndexPath(index!) as! DashBoardCell 
    print(currentCell.userID.text) //I am getting NiL 

    let deletedID = currentCell.userID.text 

    if editingStyle == .Delete 
    { 

     let tableData = indexPath.row 

     items.removeAtIndex(tableData) 
     number.removeAtIndex(tableData) 
     tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 

     let filemgr = NSFileManager.defaultManager() 
     let dirPaths = filemgr.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) 

     databasePath = dirPaths[0].URLByAppendingPathComponent("visitors.db").path! 

     let contactDB = FMDatabase(path: self.databasePath as String) 
     if contactDB.open() 
     { 
      let deleteSQL = "SELECT * FROM VISITORLIST WHERE userid = '\(deletedID)'" 
      let result = contactDB.executeUpdate(deleteSQL, withArgumentsInArray: nil) 
      if !result 
      { 
       print("Failed To Delete Visitor Lists") 
       print("Error3: ",contactDB.lastErrorMessage()) 
      } 
      else 
      { 
       print("Successfully Deleted") 

      } 

     } 
     else 
     { 
      print("Error4: ",contactDB.lastErrorMessage()) 
     } 

     tableView.reloadData() 
    } 
} 

Antwort

1

Sie sollten nicht let index = tableView.indexPathForSelectedRow verwenden, sollten Sie nur indexPath verwenden werden. Ihr aktueller Code löscht das korrekte Objekt aus den Tabellendaten, aber das falsche Objekt (oder nichts, wenn keine Zeile ausgewählt ist) aus dem SQLite-Speicher.

+0

Yeah! Du hast Recht. Ich verwirrte nur für die Auswahl von 'indexpath' von' tableView' –

1
let deleteSQL = "SELECT * FROM VISITORLIST WHERE userid = '\(deletedID)'" 

Sollte sein:

let deleteSQL = "DELETE FROM VISITORLIST WHERE userid = '\(deletedID)'" 

:)

+0

Danke Mr.Muhammed. Ich habe 'deletedID' ist null. ist sowieso 'currentCell.userID.text' zu bekommen? –

+0

Kannst du deine functableView (tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { } Methode? – Muhammed

+0

Ja .. ich werde meine Frage Mr.Muhammed aktualisieren –

Verwandte Themen