Как использовать заполненную базу данных SQLite с SharkORM - PullRequest
0 голосов
/ 08 февраля 2019

Я разработчик Android, который начал изучать разработку для iOS.Я все еще учусь, поэтому, пожалуйста, ожидайте несколько основных вопросов здесь.

Вот что я пытаюсь достичь: у меня есть существующая база данных SQLite (kanadb.db), и я хотел бы использовать ее в своем приложении для iOS.Я хотел бы использовать ORM для работы с этой базой данных (доступ будет только для чтения), поэтому я удалил файл .db в папку проекта и сделал это в AppDelegate.swift:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    SharkORM.setDelegate(self)
    SharkORM.openDatabaseNamed("kanadb")

    // -- Test --

    // Try to load some data from the database
    let results: SRKResultSet = Info.query().fetch()
    print(results)

    // ----------

    return true
}

Но этоне работает.Я заметил, что он создает новый файл kanadb.db в папке где-то в файловой системе.Нечто подобное делается в Android, при запуске нам нужно посмотреть, существует ли БД в папке приложения, и если нет, скопировать базу данных из пакета в папку приложения.Похоже, я должен сделать что-то подобное здесь, но я не знаю как, поскольку я все еще новичок в iOS.

Может кто-нибудь дать мне несколько подсказок / фрагмент кода, чтобы указать мне правильное направление?

Спасибо!

1 Ответ

0 голосов
/ 09 февраля 2019

Я только что нашел решение, поэтому я опубликую его здесь, оно может кому-то пригодиться.

Итак, как я и ожидал, нам нужно скопировать связанную базу данных в папку документов приложения.Однако файл базы данных должен быть доступен в целевом объекте, поэтому мы должны выбрать его в списке файлов (в XCode) и установить флажок Целевое членство .

Затем скопировать его в документпапка перед ее использованием:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    let DB_NAME = "kanadb"
    let DB_EXTENSION = "db"
    do{
        let databasePath = Bundle.main.url(forResource: DB_NAME, withExtension: DB_EXTENSION)
        let documentsDirectory = try FileManager.default.url(for: FileManager.SearchPathDirectory.documentDirectory, in:FileManager.SearchPathDomainMask.userDomainMask, appropriateFor:nil, create:false)

        let destination = documentsDirectory.appendingPathComponent(DB_NAME + "." + DB_EXTENSION)
        _ = try FileManager.default.copyItem(at: databasePath!, to:destination)

    } catch {
        // TODO: Catch the errors more gracefuly
        print("Couldn't copy the database to the document folder")
    }

    // Override point for customization after application launch.
    SharkORM.setDelegate(self)
    SharkORM.openDatabaseNamed(DB_NAME)

    // -- Test --

    // Try to load some data from the database
    let results: SRKResultSet = Info.query().fetch()
    print(results)

    // ----------

    return true
}

И все!Теперь может быть хорошей идеей проверить, существует ли база данных в папке «Документ» приложения, чтобы избежать этого при каждом запуске приложения.

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