17734


共用エリアに作っておいたデータベースファイルを、インストール時に移動するか、できなければ、なんらかの方法でコピーする方法がわかりません。

どうしたらいいのか、教えていただければ幸いです。

よろしくお願いいたします。

下記はテストで使っていますが、うまく動きません。

[code]

    var realmPath: String {
        let containerURL = NSFileManager().containerURLForSecurityApplicationGroupIdentifier("group.AppGroupKeybora")
        let docsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.LibraryDirectory , NSSearchPathDomainMask.UserDomainMask, true)[0]
        let databaseStr = "Dictionary.realm"
        let dbPath = docsPath.stringByAppendingString("/" + databaseStr)
        var TodbPath = containerURL!.URLByAppendingPathComponent(databaseStr).path!
    
    
        // BEGING MODIFICATION
        let fileMan = NSFileManager.defaultManager()
        if !(fileMan.fileExistsAtPath(dbPath)) {    // The database does not already exist in Documents directory
            if let source = NSBundle.mainBundle().resourcePath?.stringByAppendingString(databaseStr) {
                if !(fileMan.fileExistsAtPath(source)) {
                    print("RealmDB - file \(databaseStr) not found in bundle")
    
                } else {
                    do {
                        try fileMan.copyItemAtPath(source, toPath: TodbPath)
                    } catch let error as NSError {
                        print("RealmDB - failed to copy writable version of DB!")
                        print("Error - \(error.localizedDescription)")
                    }
                }
            }
        }
        // END MODIFICATION
    
        return TodbPath
    }
    
[/code]


CC BY-SA 3.0
2015-10-16T11:41:17.423
17728
2015-10-16T16:04:20.810
2015-10-16T16:04:20.810
5519
10845
question
swift ios8
iOSでAppGroupを利用したいのですが、初期設定で共用エリアにデータベースファイルを移動しておく方法を知りたい


あなたのコードはドキュメントディレクトリに`"Dictionary.realm"`というファイルがあるかどうをチェックして、無ければ何もしないという処理になっているので（当然ドキュメントディレクトリにファイルは無いので）、期待した通りに動かないのはそういう理由だと思います。

「共有コンテナ」にファイルがあるかどうかをチェックして、無ければ「バンドル」からファイルを「共有コンテナ」にコピーする、というのが期待している処理だと思いますので、そのように書く必要があります。

ラフに修正したのが下記になります。

[code]

    let containerURL = NSFileManager().containerURLForSecurityApplicationGroupIdentifier("group.io.realm.RealmAppCom")
    let databaseStr = "Dictionary.realm"
    let TodbPath = containerURL!.URLByAppendingPathComponent(databaseStr).path!
    
    let fileMan = NSFileManager.defaultManager()
    if !(fileMan.fileExistsAtPath(TodbPath)) {    // The database does not already exist in Documents directory
        if let source = NSBundle.mainBundle().pathForResource(databaseStr, ofType: nil) {
            if !(fileMan.fileExistsAtPath(source)) {
                print("RealmDB - file \(databaseStr) not found in bundle")
    
            } else {
                do {
                    try fileMan.copyItemAtPath(source, toPath: TodbPath)
                } catch let error as NSError {
                    print("RealmDB - failed to copy writable version of DB!")
                    print("Error - \(error.localizedDescription)")
                }
            }
        }
    }
    
    return TodbPath
    
[/code]


CC BY-SA 3.0
2015-10-16T16:04:06.520
17734
2015-10-16T16:04:06.520
5519
17728
answer