2015-05-02 2 views
6

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

Вот что я застрял - как лучше всего переносить старую базу данных в новое место в группе приложений?

+0

Есть ли причина, по которой вы не можете просто перемещать файл с помощью NSFileManager? – segiddins

+0

Apple предлагает избегать API координации файлов, поскольку данные могут быть повреждены: https://developer.apple.com/library/ios/technotes/tn2408/_index.html – Whoa

+0

Так как только ваше приложение сможет переместить его, и вы можете сделайте это атомарно, вы будете в порядке – segiddins

ответ

7

на основе @segiddins комментария, я решил пойти с двигающейся старой базой данных в приложении с помощью группы 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

Надеется, что это поможет другиму читателю.

Как описано в https://github.com/realm/realm-cocoa/issues/4490, вы можете установить путь к группе приложений с помощью кода ниже и использовать диспетчер файлов для перемещения существующего db, как упоминалось выше.

var config = Realm.Configuration() 
config.fileURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: appGroupIdentifier)!.appendingPathComponent(dbFilename) 
Realm.Configuration.defaultConfiguration = config 
Смежные вопросы