2015-05-02 3 views
6

Davvero entusiasti della recente aggiunta di condivisione dei dati di Realm tra app ed estensioni. La documentazione spiega come impostare il realm predefinito nella directory del gruppo di app, ho funzionato.Come migrare un database di reame in un gruppo di app?

Ecco a cosa sono bloccato: qual è il modo migliore per trasferire il vecchio database nella nuova posizione nel gruppo di app?

+0

C'è qualche ragione per cui non è possibile spostare il file utilizzando NSFileManager? – segiddins

+0

Apple suggerisce di evitare le API di coordinamento file, in quanto i dati possono essere danneggiati: https://developer.apple.com/library/ios/technotes/tn2408/_index.html – Whoa

+0

Poiché solo la tua app sarà in grado di spostarlo, e tu puoi fallo atomicamente, starai bene – segiddins

risposta

7

Sulla base di @segiddins commento, ho deciso di andare con lo spostamento del vecchio database al gruppo di applicazione utilizzando NSFileManager:

let fileManager = NSFileManager.defaultManager() 

    //Cache original realm path (documents directory) 
    let originalDefaultRealmPath = RLMRealm.defaultRealmPath() 

    //Generate new realm path based on app group 
    let appGroupURL: NSURL = fileManager.containerURLForSecurityApplicationGroupIdentifier("group.AppGroup")! 
    let realmPath = appGroupURL.path!.stringByAppendingPathComponent("default.realm") 

    //Moves the realm to the new location if it hasn't been done previously 
    if (fileManager.fileExistsAtPath(originalDefaultRealmPath) && !fileManager.fileExistsAtPath(realmPath)) { 

     var error: NSError? 
     fileManager.moveItemAtPath(originalDefaultRealmPath, toPath: realmPath, error: &error) 

     if (error != nil) { 
      println(error) 
     } 
    } 

    //Set the realm path to the new directory 
    RLMRealm.setDefaultRealmPath(realmPath) 
0

Spero che questo vi aiuterà altro lettore.

Come discusso in https://github.com/realm/realm-cocoa/issues/4490, è possibile impostare il percorso del gruppo di app con il codice riportato di seguito e utilizzare File Manager per spostare il db esistente come sopra menzionato.

var config = Realm.Configuration() 
config.fileURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: appGroupIdentifier)!.appendingPathComponent(dbFilename) 
Realm.Configuration.defaultConfiguration = config