Как перенести базу данных Realm в группы приложений - PullRequest
0 голосов
/ 30 сентября 2019

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

var config = Realm.Configuration()
config.fileURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.bundle.identifier")!.appendingPathComponent("default.realm")
Realm.Configuration.defaultConfiguration = config

Код прекрасно меняет путь к файлу, проблема в том, что данные меняются, когда я меняю путь, так как данные по предыдущему пути непереданы.

У кого-то еще был похожий вопрос здесь , но он очень устарел и не работал

Я пробовал такие способы его передачи, но все какне удалось

 migrateData(){
    let fileManager = FileManager.default

    //Cache original realm path (documents directory)
    let originalDefaultRealmPath = realm.configuration.fileURL?.absoluteString

    //Generate new realm path based on app group
    let appGroupURL: NSURL = fileManager.containerURL(forSecurityApplicationGroupIdentifier: "group.com.groupIndentifier")! as NSURL
    let realmPath = appGroupURL.path!.appending("default.realm")

    //Moves the realm to the new location if it hasn't been done previously
    if (fileManager.fileExists(atPath: originalDefaultRealmPath!) && !fileManager.fileExists(atPath: realmPath)) {
        do{
           try fileManager.moveItem(atPath: originalDefaultRealmPath!, toPath: realmPath)
        }
        catch{
            print("error")
        }
    }

    let config = Realm.Configuration(fileURL: appGroupURL.absoluteURL)
    //Set the realm path to the new directory
    Realm.Configuration.defaultConfiguration = config
}

Заранее спасибо за помощь! Я все еще довольно новичок в Swift и программировании в целом, так что извините, если я ничего не понимаю.

1 Ответ

0 голосов
/ 30 сентября 2019

Благодаря ответу @ Jay, я смог ответить на свой вопрос. Если кому-то нужна помощь, вот что я сделал:

let fileManager = FileManager.default

    let originalPath = Realm.Configuration.defaultConfiguration.fileURL!

    let appGroupURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.bundle.identifier")!.appendingPathComponent("default.realm")
    do{
        try fileManager.replaceItemAt(appGroupURL, withItemAt: originalPath    )
    }
    catch{
    print("Error info: \(error)")
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...