Таблица обновления не работает с реальным устройством (fmdb)

Я новичок в разработке iOS, и у меня есть проблема. Я пытаюсь обновить таблицу с помощью FMDB, но, хотя она работает во всех симуляторах, она не работает на реальном устройстве. Я уверен, что БД была передана на устройство, потому что все запросы выбора выполняются правильно. С другой стороны все запросы на обновление нет. Я пытался использовать NSNumber или NSInteger, но... ничего.

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()
    }

Ни одно из вышеперечисленных решений не работает.

Любая помощь?

1 ответ

Решение

Проблема заключалась в том, что файл db находился в комплекте ресурсов, предназначенных только для чтения. Когда я скопировал файл БД в папку "Документы", все работало нормально.

Я нашел на http://www.theappguruz.com/blog/use-sqlite-database-swift

этот кусок кода

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()
    }
} 

Код с UIAlertView является дополнительным, вы можете опустить его.

Другие вопросы по тегам