Проблема с копированием существующей базы данных области в swift - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть область базы данных, и я пытаюсь скопировать ее в быстрый проект. База данных успешно получает скопированные данные, но делает один столбец пустым, отделяет его от другой базы данных и помещает в конец как пустой столбец. База данных перед копированием составляет , например . и после копирования это как это . Я не могу понять этот код поведения для копирования БД.

 guard let documentsUrl = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
    let finalDatabaseURL = documentsUrl.appendingPathComponent("default.realm")

    do {
        if !fileManager.fileExists(atPath: finalDatabaseURL.path) {
            if let dbFilePath = Bundle.main.path(forResource: "default", ofType: "realm") {
                try fileManager.copyItem(atPath: dbFilePath, toPath: finalDatabaseURL.path)
            } else {
                print("db not in the app bundle")
            }
        } else {
            print("Database file found at path: \(finalDatabaseURL.path)")
        }
    } catch {
        print("Unable to copy: \(error.localizedDescription)")
    }

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Не похоже, что это та же база данных или ее копия: имена столбцов разные - на одном снимке экрана это Sub_category, а на втором снимке экрана это sub_category, обратите внимание на заглавную 'S' против строчной 's'.

Взгляните на определение вашей модели Realm или, возможно, изучите код миграции, если он у вас есть. Я не думаю, что код в вопросе связан с проблемой, которую вы описываете.

0 голосов
/ 26 февраля 2020

Попробуйте следующий код:

let defaultPath = try! Realm().configuration.fileURL?.path
let path = Bundle.main.path(forResource: "default-v0", ofType: "realm")

if let defaultPath = defaultPath, let bundledPath = path {
    do {
        if FileManager.default.fileExists(atPath: defaultPath) {
            try FileManager.default.removeItem(atPath: defaultPath)
        }
        try FileManager.default.copyItem(atPath: bundledPath, toPath: defaultPath)
    } catch {
        print("Error copying pre-populated Realm \(error)")
    }
}
_ = try! Realm()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...