领域默认同步文件
Realm default sync file
学习如何使用 Realm 移动平台。
我构建了一个小型 iOS 应用程序,它成功地将数据保存到服务器,并且数据在不同设备上是一致的。该应用程序与 official realm tutorial 非常相似。
我可以从 Realm 浏览器 Mac 应用程序 打开 Sync URL,我可以看到实时发生的变化。这就是我卡住的地方:我试图查看本地领域文件中的更改,但是
print(self.realm.configuration.fileURL)
returns 无
print(Realm.Configuration.defaultConfiguration.fileURL)
是一个空文件
这是我的代码:
SyncUser.logIn(with: cloudKitCredentials, server: serverURL) { user, error in
guard let user = user else {
fatalError(String(describing: error))
}
DispatchQueue.main.async {
// Open Realm
let configuration = Realm.Configuration(
syncConfiguration: SyncConfiguration(
user: user,
realmURL: URL(string: "realm://myIPaddress/~/realmtasks")!)
)
self.realm = try! Realm(configuration: configuration)
// Show initial tasks
func updateList() {
self.items = Array(self.realm.objects(Row.self))
self.tableView.reloadData()
}
updateList()
print(self.realm.configuration.fileURL)
//returns nil
print(Realm.Configuration.defaultConfiguration.fileURL)
// I can open the file, but it's empty
// Notify us when Realm changes
self.notificationToken = self.realm.addNotificationBlock { _ in
updateList()
}
}
我测试这个的原因是我可以从文件而不是从服务器加载数据。这样:(a)登录只会被调用一次(b)当用户离线时数据可用。
当您第一次登录时,Realm 会自动将用户存储在钥匙串中。然后您可以通过 SyncUser.currentUser
属性 检索它并使用它打开您的领域,即使您处于离线状态。但是,如果您注销用户,那么您将无法离线使用它。
realm.configuration.fileURL
在使用 syncConfiguration
时不可用。
对于这种情况:
- 只调用
SyncUser.logIn
一次
- 对于普通应用程序 运行s (即除初始 运行 之外的所有 运行s),open 使用相同的领域配置。
你应该有这样的东西:
// First launch
if launchedBefore == false {
setupRealm()
// All other launches
} else if launchedBefore == true {
let user = SyncUser.current!
openRealm(forUser: user)
}
openRealm(forUser: SyncUser)
与前面代码中的整个分派块基本相同。
setupRealm()
也可以调用它来清理代码:
SyncUser.logIn(with: cloudKitCredentials, server: serverURL) { user, error in
guard let user = user else {
fatalError(String(describing: error))
}
self.openRealm(forUser: user)
}
学习如何使用 Realm 移动平台。
我构建了一个小型 iOS 应用程序,它成功地将数据保存到服务器,并且数据在不同设备上是一致的。该应用程序与 official realm tutorial 非常相似。
我可以从 Realm 浏览器 Mac 应用程序 打开 Sync URL,我可以看到实时发生的变化。这就是我卡住的地方:我试图查看本地领域文件中的更改,但是
print(self.realm.configuration.fileURL)
returns 无
print(Realm.Configuration.defaultConfiguration.fileURL)
是一个空文件
这是我的代码:
SyncUser.logIn(with: cloudKitCredentials, server: serverURL) { user, error in
guard let user = user else {
fatalError(String(describing: error))
}
DispatchQueue.main.async {
// Open Realm
let configuration = Realm.Configuration(
syncConfiguration: SyncConfiguration(
user: user,
realmURL: URL(string: "realm://myIPaddress/~/realmtasks")!)
)
self.realm = try! Realm(configuration: configuration)
// Show initial tasks
func updateList() {
self.items = Array(self.realm.objects(Row.self))
self.tableView.reloadData()
}
updateList()
print(self.realm.configuration.fileURL)
//returns nil
print(Realm.Configuration.defaultConfiguration.fileURL)
// I can open the file, but it's empty
// Notify us when Realm changes
self.notificationToken = self.realm.addNotificationBlock { _ in
updateList()
}
}
我测试这个的原因是我可以从文件而不是从服务器加载数据。这样:(a)登录只会被调用一次(b)当用户离线时数据可用。
当您第一次登录时,Realm 会自动将用户存储在钥匙串中。然后您可以通过 SyncUser.currentUser
属性 检索它并使用它打开您的领域,即使您处于离线状态。但是,如果您注销用户,那么您将无法离线使用它。
realm.configuration.fileURL
在使用 syncConfiguration
时不可用。
对于这种情况:
- 只调用
SyncUser.logIn
一次 - 对于普通应用程序 运行s (即除初始 运行 之外的所有 运行s),open 使用相同的领域配置。
你应该有这样的东西:
// First launch
if launchedBefore == false {
setupRealm()
// All other launches
} else if launchedBefore == true {
let user = SyncUser.current!
openRealm(forUser: user)
}
openRealm(forUser: SyncUser)
与前面代码中的整个分派块基本相同。
setupRealm()
也可以调用它来清理代码:
SyncUser.logIn(with: cloudKitCredentials, server: serverURL) { user, error in
guard let user = user else {
fatalError(String(describing: error))
}
self.openRealm(forUser: user)
}