Приложение Swift с SQLITE вылетает после обновления БД.Файл SQLITE не копируется в файл / комплект - PullRequest
0 голосов
/ 20 декабря 2018

Мое приложение работало отлично, пока я не использовал новый браузер SQLite и внес некоторые изменения в мой файл sqlite.Тогда внезапно возникает проблема с открытием базы данных.Функция открытия базы данных выглядит следующим образом:

func openDatabase() -> Bool {
        do {
            let manager = FileManager.default

            let documentsURL = try manager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("database.sqlite")
            var rc = sqlite3_open_v2(documentsURL.path, &db, SQLITE_OPEN_READWRITE, nil)
            if rc == SQLITE_CANTOPEN {
                let bundleURL = Bundle.main.url(forResource: "database", withExtension: "sqlite")!
                try manager.copyItem(at: bundleURL, to: documentsURL)
                rc = sqlite3_open_v2(documentsURL.path, &db, SQLITE_OPEN_READWRITE, nil)
            }

            if rc != SQLITE_OK {
                print("Error: \(rc)")
                return false
            }
            return true
        } catch {
            print(error)
            return false
        }     
    }

После внесения изменений в БД с помощью Браузер БД для sqlite приложение завершает работу в момент открытия базы данных, указывая, что этострока выдает неожиданный ноль при развертывании необязательного значения:

 let bundleURL = Bundle.main.url(forResource: "database", withExtension: "sqlite")!

Журнал выдает следующий текст:

2018-12-20 18:16:22.306631+0100 eFloraSnap[7844:165367] [logging-persist] cannot open file at line 42249 of [95fbac39ba]
2018-12-20 18:16:22.306810+0100 eFloraSnap[7844:165367] [logging-persist] os_unix.c:42249: (0) open(/Users/tomsol/Library/Developer/CoreSimulator/Devices/143DCE6E-01F0-40D0-9640-6397504D81FA/data/Containers/Data/Application/6BB619CB-BEF9-4917-9A74-8C92D84DA2F0/Documents/database.sqlite) - Undefined error: 0
(lldb) 

Я не понимаю.Я полностью удалил XCode с помощью «Clean My Mac» и переустановил XCode с нуля, в надежде удалить некоторые плохие настройки.Это ничего не решило.Думая, что может быть проблема с некоторым форматированием базы данных.

Есть ли какая-либо другая причина, по которой это происходит?

РЕДАКТИРОВАТЬ: я теперь видел, что databse.sqlite не находится в пути, указанном вжурнал.Так почему же файл sqlite не копируется туда при сборке и запуске?Та же проблема с устройством, что и у симулятора.

1 Ответ

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

Ну, похоже, что полное удаление XCode не исправляет плохие настройки.Исправлено добавление файла sqlite в ресурсы комплекта Buildphases-Copy.Почему оно исчезло из копии комплекта ресурсов в первый раз, неизвестно.Почему он не был добавлен автоматически с использованием только что установленного xcode, также неизвестно.

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