2017-04-22 74 views
0

我遇到了使用Swift 3.1將外部和國際字符插入或更新到SQLite數據庫的問題。 所以,我試着下面添加UTF8,但遇到一個錯誤「無法將類型'字符串'的值轉換爲期望的參數類型'OpaquePointer!' 」。不透明指針錯誤Swift 3.1

我很難過,不知道在哪裏看。

func saveDiveDetails (_ dives: Dives) -> Int32 { 
    let diveLog = AppDelegate.getDLDatabase() 

    let diveBuddy = diveBuddyTextField.text ?? "" 
    let diveMaster = diveBuddyTextField.text ?? "" 
    let boatName = diveBuddyTextField.text ?? "" 
    let diveCenter = diveBuddyTextField.text ?? "" 
    let boatOperator = diveBuddyTextField.text ?? "" 
    let city = diveBuddyTextField.text ?? "" 
    let country = diveBuddyTextField.text ?? "" 
    let bodyOfWater = diveBuddyTextField.text ?? "" 
    let tripName = diveBuddyTextField.text ?? "" 
    var statement: OpaquePointer? = nil 

    let update:String = String(format: "UPDATE Dives SET dive_buddy = ?, dive_master = ?, boatName_name = ?, diveCenter_name = ?, boatOperator_name = ?, diveCity_name = ?, bodyOfWater_name = ?, diveCountry_name = ?, tripName_name = ? WHERE id = %d") 

    if(sqlite3_prepare_v2(self.dlDatabase.database, update, -1, &statement, nil) == SQLITE_OK){ 
     sqlite3_bind_text(update, 0, diveBuddy.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT) 
     sqlite3_bind_text(update, 1, diveMaster.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT) 
     sqlite3_bind_text(update, 2, boatName.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT) 
     sqlite3_bind_text(update, 3, diveCenter.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT) 
     sqlite3_bind_text(update, 4, boatOperator.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT) 
     sqlite3_bind_text(update, 5, city.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT) 
     sqlite3_bind_text(update, 6, bodyOfWater.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT) 
     sqlite3_bind_text(update, 7, country.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT) 
     sqlite3_bind_text(update, 8, tripName.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT) 
     sqlite3_bind_int(update, 9, self.diveNumber) 
    } 

    sqlite3_prepare_v2(self.dlDatabase.database, update, -1, &statement, nil) 
    sqlite3_bind_int(statement, 1, Int32(self.diveNumber)); 
    if sqlite3_step(statement) == SQLITE_DONE { 

     print("SQLite saved") 
    } 
    else { 
     let errorMessage = String.init(validatingUTF8: sqlite3_errmsg(dlDatabase.database))! 
     print("update failed! \(errorMessage)") 
    } 
    sqlite3_finalize(statement) 
} 

我搜索每一個,但找不到這種類型的錯誤的參考。

+0

可以使用String'類的''.utf8CString'財產過於轉換。你能澄清哪一行導致編譯錯誤? –

回答