我有一个本地Realm数据库,满160000行。我想将它复制到Realm的本地路径,以便能够将其用作官方数据库,并在线同步。 (所以我的空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.
}
}
答案 0 :(得分:1)
只是为了确认我认为你在问什么。您预先捆绑了一个Realm数据库文件,其中包含160,000行数据以及您的应用。当新用户登录应用程序时,数据将与其帐户同步。
未同步的Realm文件和同步的Realm文件是两种不同的文件格式,因此无法将一个文件转换为另一个文件。将预先捆绑的脱机Realm复制到用户控制的目录,然后尝试应用syncConfiguration
对象不会做任何事情。
最简单的解决方案是创建一个新的同步Realm,然后在第一次启动应用程序时将数据从预先捆绑的Realm复制到同步的Realm中。
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。 :)