gpt4 book ai didi

swift - Realm 默认同步文件

转载 作者:行者123 更新时间:2023-11-28 06:24:40 25 4
gpt4 key购买 nike

学习如何使用 Realm 移动平台。

我构建了一个小型 iOS 应用程序,它成功地将数据保存到服务器,并且数据在不同设备之间是一致的。该应用程序与 official realm tutorial 非常相似.

我可以从 Realm 浏览器 Mac 应用程序 打开同步 URL,我可以看到实时发生的变化。这就是我卡住的地方:我试图查看本地 Realm 文件中的更改,但是

print(self.realm.configuration.fileURL) 返回 nilprint(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 会自动将用户存储在钥匙串(keychain)中。然后您可以通过 SyncUser.currentUser 属性检索它并使用它打开您的 Realm ,即使您处于离线状态。但是,如果您注销用户,那么您将无法离线使用它。

realm.configuration.fileURL 在使用 syncConfiguration 时不可用。


对于这种情况:

  1. 只调用一次SyncUser.logIn
  2. 对于正常的应用程序运行(即除了初始运行之外的所有运行),打开具有相同配置的 Realm 。

你应该有这样的东西:

// First launch
if launchedBefore == false {
setupRealm()

// All other launches
} else if launchedBefore == true {
let user = SyncUser.current!
openRealm(forUser: user)
}

openRealm(forUser: SyncUser) 与之前代码中的整个调度 block 基本相同。

setupRealm()也可以调用它来清理代码:

SyncUser.logIn(with: cloudKitCredentials, server: serverURL) { user, error in
guard let user = user else {
fatalError(String(describing: error))
}

self.openRealm(forUser: user)
}

关于swift - Realm 默认同步文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42363294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com