Ho impostato il progetto rapido per usare sqlite. a volte, quando si inserisce in realtà non inserisce i valori corretti (o tutti). Lo so perché riavvio l'app, e quando torno nelle voci sono o casualmente sbagliato (con roba non inserita) o nullo. ma a volte corretto.sqlite per swift è instabile
qui è dove l'ho impostato e sì i dati sono corretti nei valori prima dell'inserimento.
let update = "INSERT INTO ToDoItem (itemName, completed, goalDate) " + "VALUES (?, ?, ?);"
var statement: COpaquePointer = nil
if sqlite3_prepare_v2(database, update, -1, &statement, nil) == SQLITE_OK {
let itemName = item.itemName as String
let completed = item.completed == true ? 1 : 0
sqlite3_bind_text(statement, 1, itemName, -1, nil)
sqlite3_bind_int(statement, 2, Int32(completed))
if let goalDate = item.goalDate?.toString() {
sqlite3_bind_text(statement, 3, goalDate, -1, nil)
} else {
sqlite3_bind_text(statement, 3, "", -1, nil)
}
//println("inserting \(itemName), \(completed) and \(item.goalDate?.toString())")
//println("")
}
if sqlite3_step(statement) != SQLITE_DONE {
println("error updateing table")
sqlite3_close(database)
return
}
sqlite3_finalize(statement)
sqlite3_close(database)
si può vedere il println commentata in mezzo, se questo non è commentata, poi l'itemName volte diventa parte di quella stringa.
Devi anche usare 'SQLITE_TRANSIENT' per l'ultimo parametro per' sqlite3_bind_text' . – Rob
SQLITE_TRANSIENT non è disponibile swift 3? puoi per favore avvisare –
@SaurabhPrajapati Ho trovato questa risposta che copre la definizione manuale di SQLITE_TRANSIENT in Swift 3: https://stackoverflow.com/a/26884081/470339 – Alastair