学习如何使用 Realm Mobile Platform。
我构建了一个小型iOS应用程序,可以成功地将数据保存到服务器,并且数据在不同设备上保持一致。该应用与official realm tutorial非常相似。
我可以从领域浏览器Mac应用程序打开同步URL,我看到实时发生的变化很好。这就是我被困住的地方:我正在尝试查看本地域文件中的更改,但
print(self.realm.configuration.fileURL)
返回nil
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)数据在用户离线时可用。
答案 0 :(得分:1)
当您第一次登录时,Realm会自动将用户存储在钥匙串中。然后,您可以通过SyncUser.currentUser
属性检索它,即使您已离线,也可以使用它来打开您的领域。但是,如果您注销该用户,则您无法离线使用它。
realm.configuration.fileURL
时 syncConfiguration
不可用。
对于这种情况:
SyncUser.logIn
你应该有这样的东西:
// 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)
}