SQLite Delete на самом деле не удаляет элемент - PullRequest
0 голосов
/ 23 апреля 2020

Я использую SQLite.Swift в моем iOS приложении. Я просмотрел документы в Github, но не могу удалить элемент из таблицы. Вот что у меня есть:

func insertIntoFavorites(product: Product, completion: @escaping(SQLiteResults) -> Void) {
    //Before inserting to the database, we are converting quantities(int array) to a string because SQLite does not support arrays.
    let quantityString = Helpers.shared.convertIntArrayToString(array: product.quantities)
    let inserted = favoritesTable.insert(
        uuid <- product.uuid,
        name <- product.productName,
        manufacturer <- product.productManufacturer,
        image <- product.productImage,
        quantity <- quantityString,
        amount <- product.amount,
        notes <- product.notes,
        storeid <- product.storeID,
        storename <- product.storeName,
        ownerid <- product.ownerID
    )

    openDatabase()
    do {
        let rowid = try database.run(inserted)
        completion(.insertionSucceeded)

    }catch let Result.error(message: _, code: code, statement: _) where code == SQLITE_CONSTRAINT{

        //If the item has already been in the database, we should delete it from the database.
        let productToDelete = favoritesTable.filter(id == Expression<Int>(rowid))
        do {
            try database.run(productToDelete.delete())
            completion(.deleted)
        } catch {
            print(error)
        }

    } catch let error {
        //An unknown error, print it and return insertionError.
        print(error)
        completion(.insertionError)
    }
}

По сути, когда пользователь пытается вставить что-то в уже существующую таблицу, я хочу удалить ее.

Я скопировал из документации именно так, как это написано, оно достигает .deleted completion, но элемент не удаляется. Странно то, что вместо строки productToDelete представляет собой table. Но так же, как на документах.

Кто-нибудь понял, почему и как я могу заставить его работать? Я видел несколько подобных проблем здесь, но не смог найти ответ.

РЕДАКТИРОВАТЬ: Я подумал, может быть, это потому, что rowid не входит в область действия catch, поэтому я попытался иметь переменную функции, присвойте ему rowid и используйте его вот так, но все равно ничего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...