2017-05-02 11 views
0

私は160000行の完全なローカルレルムデータベースを持っています。レルムが公式のDBとして使用できるように、それをローカルパスにコピーして、オンラインで同期したいと思います。 (したがって私の空のDbは同期されます)。それをしてもいいですか?レルムオブジェクトサーバー。同期初期ローカルDB

func loginCompletedA(user: SyncUser) { 
     let realmURL = URL(string: “realm://xxx.compute-1.amazonaws.com:9080/beerUsers”)! 
     var configuration = Realm.Configuration.defaultConfiguration 
     configuration.syncConfiguration = SyncConfiguration(user: user, realmURL: realmURL) 
     let defaultURL = configuration.fileURL! 
     //let defaultParentURL = defaultURL.deletingLastPathComponent() 
     if let v0URL = Bundle.main.url(forResource: “default”, withExtension: “realm”){ 
      do { 
       //if !ifNotExists { 
       try FileManager.default.removeItem(at: defaultURL) 
       //} 
       try FileManager.default.copyItem(at: v0URL, to: defaultURL) 
      } catch {} 

      do { 
       try FileManager.default.copyItem(at: v0URL, to: defaultURL) 
      } catch {} 
     }else{ 

     } 


     let realm = try! Realm(configuration: configuration) 
     let session = user.session(for: realmURL)! 
     downloadToken = session.addProgressNotification(for: .download, mode: .reportIndefinitely) { 
      print(“download progress: \($0)“) // This is never called. 
     } 
     uploadToken = session.addProgressNotification(for: .upload, mode: .reportIndefinitely) { 
      print(“upload progress: \($0)“) // This is never called. 
     } 
    } 

答えて

1

ちょうど私はあなたが求めていると思うものを確認するために(それがユーザーの特定のフォルダにローカルフォルダにDBのコピーではなくので、この時点では、動作しません)。レルムデータベースファイルをあらかじめバンドルしておき、アプリケーションと一緒に160,000行のデータが含まれています。新しいユーザーがアプリにログインすると、データはアカウントに同期されます。

非同期レルムファイルと同期レルムファイルは、2つの異なるファイル形式であるため、1つのファイルを別のファイルに変換することはできません。事前にバンドルされたオフラインレルムをユーザーが制御するディレクトリにコピーしてからsyncConfigurationオブジェクトを適用しようとしても、何も行われません。

これに対して最も簡単な解決策は、同期された新しいレルムを作成し、アプリが最初に起動したときに、事前にバンドルされたレルムのデータを同期レルムにコピーすることです。

let bundledRealmURL = Bundle.main.url(forResource: “default”, withExtension: “realm”)! 

let localConfiguration = Realm.Configuration() 
configuration.readOnly = true 
configuration.fileURL = bundledRealmURL 
let localRealm = try! Realm(configuration: configuration) 

let syncConfiguration = Realm.Configuration() 
syncConfiguration.syncConfiguration = SyncConfiguration(user: user, realmURL: realmURL) 
let syncRealm = try! Realm(configuration: configuration) 

let myObjects = localRealm.objects(MyObject.self) 

try! syncRealm.write { 
    for myObject in myObjects { 
     let newObject = MyObject(value: myObject) 
     syncRealm.add(newObject) 
    } 
} 

Realmの将来のリリース用のRealmを「プレフィル」することを簡単にする方法を模索しています。 :)

+2

WOW、ありがとう。 初期充填の60Mbを節約するため、事前充填機能は必須です。 – Franck

+0

オフラインの最初のアプリ(つまり、ログインを前もって必要としないアプリ)にも必要です。 – Ixx

+0

@TiM関連 - データを同期するには、同期設定で初期化された領域を常に使用する必要がありますか?言い換えれば、私はデフォルトの領域を使うべきではありませんか? – Ixx

関連する問題