У меня возникла проблема при iOS разработке приложения.
Версия Xcode: 11 Версия Swift: 5
Для приложения существует два вида - First_View и Second_View. В First_View есть представление коллекции, которое должно перечислять данные в таблице "custom_location" из SQLite. В First_View есть кнопка, которая предназначена для перехода к Second_View.
В Second_View есть представление коллекции, которое должно перечислять данные в таблице "all_location" из SQLite. Пользователь может выбрать элемент, и этот элемент будет вставлен в таблицу «custom_location».
Поведение текущей проблемы: если в таблице «custom_location» есть какая-либо запись, First_View отобразит эти данные, когда приложение будет запущен. Затем я пытаюсь нажать кнопку, чтобы перейти к Second_View и выбрать элемент. Однако этот элемент не может быть вставлен в «custom_location».
Я замечаю, что если «custom_location» в начале, Second_View способен вставлять данные в «custom_location».
Связанный код для выбора и вставки из SQLite:
public static func getCustomLocationList() -> [Int] {
var customLocationList:[Int] = []
var locationId:Int = -1
var db :SQLiteConnect?
//Database connection path
let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let sqlitePath = urls[urls.count-1].absoluteString + Settings.dbName
db = SQLiteConnect(path: sqlitePath)
if let mydb = db{
let statement = mydb.fetch("custom_location_list", cond: "location_id > 0", order: "id DESC")
while sqlite3_step(statement) == SQLITE_ROW{
locationId = Int(sqlite3_column_int(statement, 1))
customLocationList.append(locationId)
}
}
return customLocationList
}
public static func insertCustomLocation(_ locationId: Int){
var db :SQLiteConnect?
//Database connection path
let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let sqlitePath = urls[urls.count-1].absoluteString + Settings.dbName
db = SQLiteConnect(path: sqlitePath)
if let mydb = db {
mydb.insert("custom_location_list", rowInfo: ["location_id":"\(locationId)"])
}
}
В моем SQLiteConnect.swift функции «выборка» и «вставка»:
func fetch(_ tableName :String, cond :String?, order :String?) -> OpaquePointer {
var statement :OpaquePointer? = nil
var sql = "select * from \(tableName)"
if let condition = cond {
sql += " where \(condition)"
}
if let orderBy = order {
sql += " order by \(orderBy)"
}
sqlite3_prepare_v2(self.db, sql.cString(using: String.Encoding.utf8), -1, &statement, nil)
return statement!
}
func insert(_ tableName :String, rowInfo :[String:String]) -> Bool {
var statement :OpaquePointer? = nil
let sql = "insert into \(tableName) " + "(\(rowInfo.keys.joined(separator: ","))) " + "values (\(rowInfo.values.joined(separator: ",")))"
if sqlite3_prepare_v2(self.db, sql.cString(using: String.Encoding.utf8), -1, &statement, nil) == SQLITE_OK {
if sqlite3_step(statement) == SQLITE_DONE {
return true
}
sqlite3_finalize(statement)
}
return false
}