2016-05-18 7 views
0

Ich bin Neuling in iOS-Entwicklung, und ich habe ein Problem. Ich versuche, eine Tabelle mit FMDB zu aktualisieren, aber obwohl es in allen Simulatoren funktioniert hat, funktioniert es nicht auf einem realen Gerät. Ich bin sicher, dass die Datenbank auf das Gerät übertragen wurde, weil alle Select-Abfragen ordnungsgemäß ausgeführt werden. Auf der anderen Seite alle Update-Abfragen nicht. Ich habe versucht, NSNumber oder NSInteger zu verwenden, aber ... nichts.Update-Tabelle funktioniert nicht mit einem echten Gerät (fmdb)

if (database.open()) 
    { 
     let rs = database.executeQuery("update \(TABLE_NAME) set x=1 where id=\(y.getId())",withArgumentsInArray: nil) 
     //database.executeUpdate("update \(TABLE_NAME) set x=1 where id=?", withArgumentsInArray:[NSInteger(y.getId())]) 
     database.close() 
    } 

Keine der obigen Lösungen funktioniert.

Irgendwelche Hilfe?

Antwort

1

Das Problem war, dass die DB-Datei im Paket Resources, die schreibgeschützt ist. Als ich die db-Datei in den Ordner Dokumente kopiert habe, hat alles funktioniert.

fand ich auf http://www.theappguruz.com/blog/use-sqlite-database-swift

dieses Stück Code

class func copyFile(fileName: NSString) { 
    let dbPath: String = getPath(fileName as String) 
    let fileManager = NSFileManager.defaultManager() 
    if !fileManager.fileExistsAtPath(dbPath) { 

     let documentsURL = NSBundle.mainBundle().resourceURL 
     let fromPath = documentsURL!.URLByAppendingPathComponent(fileName as String) 

     var error : NSError? 
     do { 
      try fileManager.copyItemAtPath(fromPath.path!, toPath: dbPath) 
     } catch let error1 as NSError { 
      error = error1 
     } 
     let alert: UIAlertView = UIAlertView() 
     if (error != nil) { 
      alert.title = "Error Occured" 
      alert.message = error?.localizedDescription 
     } else { 
      alert.title = "Successfully Copy" 
      alert.message = "Your database copy successfully" 
     } 
     alert.delegate = nil 
     alert.addButtonWithTitle("Ok") 
     alert.show() 
    } 
} 

Der Code mit dem UIAlertView ist ein Extra, Sie können es weglassen.