Предварительно заполненный файл БД SQLite не сохраняет обновления? - PullRequest
0 голосов
/ 11 декабря 2018

Я создал файл БД SQLite и заполнил его данными в приложении на симуляторе, и теперь мне нужна та же база данных и данные в новом проекте.Я скопировал файл SQLite в новый проект, но каждый раз, когда я обновляю строку (удаляю / редактирую), данные обновляются до следующего запуска, и после повторного запуска проекта мои данные и файл SQLite выглядят так, как будто они были недавно скопированы в проект.

PS: функция «clearData (_ SID: Int)» удаляет строку, но после перезапуска проекта в xcode строка есть ...

Вот моя структура базы данных:

import SQLite

var db: Connection!
let sherTable = Table("Sher");
let ID = Expression<Int>("SID");
let Fname = Expression<String?>("Fname");
let Ename = Expression<String?>("Ename");
let Flike = Expression<Bool?>("Flike");
let Elike = Expression<Bool?>("Elike");

let byteTable = Table("Byte");
let BID = Expression<Int>("BID");
let BSID = Expression<Int>("SID");
let Byte = Expression<String?>("Byte");
let searchText = Expression<String?>("searchText");
let BIsFarsi = Expression<Bool?>("IsFarsi");

let maniTable = Table("Mani");
let MID = Expression<Int>("MID");
let MSID = Expression<Int>("SID");
let Word = Expression<String?>("Word");
let Meaning = Expression<String?>("Meaning");
let MIsFarsi = Expression<Bool?>("IsFarsi");

func connectToDB() {
    do {
        let path = Bundle.main.path(forResource: "hafezDb", ofType: "sqlite3")!;

        let tmp = try Connection(path);
        db = tmp;
    } catch {
        print(error);
    }
}

func clearData(_ SID: Int) {
    let sher = sherTable.filter(ID == SID);
    let u = sher.update(Flike <- !Flike);
    do {
        try db.run(u);
    } catch {
        print(error)
    }
}

1 Ответ

0 голосов
/ 11 декабря 2018

Вы должны быть запущены в симуляторе.

Пакет приложения доступен только для чтения на реальном устройстве, но доступен для записи в симуляторе.

Таким образом, ваше приложение работает втренажер.Но затем вы делаете другую сборку, и предварительно заполненный файл базы данных в вашем проекте помещается обратно во встроенное приложение каждый раз, когда вы запускаете его, и вы снова начинаете работу с исходными данными.

На реальном устройстве ваше приложение будетошибка из-за ошибок, связанных с тем, что база данных доступна только для чтения.

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

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