Резервное копирование и восстановление базы данных realm.io

Мне нужно сделать резервную копию базы данных realm.io по умолчанию и восстановить ее из Dropbox. Я использую Dropbox-iOS-SDK для загрузки и скачивания. Когда я попытался заменить текущий файл базы данных (например, default.realm) резервной копией, RLMRealm был в кеше, и я не могу очистить этот кеш, поэтому я не могу создать новый экземпляр базы данных.

Могу ли я перезагрузить объект RLMRealm?

Вот код:

    func reloadDB(fromPath: String) {
        let defaultParentPath = RLMRealm.defaultRealmPath().stringByDeletingLastPathComponent
        let dbPath = defaultParentPath.stringByAppendingPathComponent("db.realm")
        let dbLockPath = defaultParentPath.stringByAppendingPathComponent("db.realm.lock")

        NSFileManager.defaultManager().removeItemAtPath(dbPath, error: nil)
        NSFileManager.defaultManager().removeItemAtPath(dbLockPath, error: nil)

        NSFileManager.defaultManager().copyItemAtPath(fromPath, toPath: dbPath, error: nil)

        self.db = RLMRealm(path: dbPath, readOnly: false, error: nil)

        NSFileManager.defaultManager().removeItemAtPath(fromPath, error: nil)
    }

Как лучше всего сделать резервную копию базы данных Realm.io?


person Nicopuri    schedule 31.03.2015    source источник


Ответы (1)


Резервное копирование и восстановление файла Realm из Dropbox должно работать нормально, поскольку база данных — это просто файл. Однако вы должны убедиться, что у вас нет ссылок на существующую область, прежде чем удалять ее.

person segiddins    schedule 31.03.2015
comment
должен ли я удалить предыдущую ссылку, а затем заменить файл и создать новый экземпляр? Как удалить ссылку? просто установить на ноль? - person Nicopuri; 31.03.2015
comment
Это не работает. Я установил self.db = nil перед заменой db.realm, и это не работает - person Nicopuri; 31.03.2015
comment
имейте в виду, что любые RLMObjects, RLMResults или RLMArrays, которые у вас есть, также будут содержать сильную ссылку на область - person segiddins; 31.03.2015
comment
Большой!! Я забыл одну ссылку - person Nicopuri; 31.03.2015