Docs 菜单

Docs 主页开发应用程序Atlas Device SDKs

删除 Realm 文件 - Swift SDK

在此页面上

  • 删除 Realm 文件以避免迁移
  • 删除 Realm 文件
  • 在重置客户端期间删除 Realm 文件

在某些情况下,您可能需要从磁盘中完全删除 Realm 文件。

除非绝对需要,否则 Realm 会避免将数据复制到内存。因此,所有由 Realm 管理的对象都引用磁盘上的文件。在安全删除文件之前,您必须确保这些对象已释放:

  • 从 Realm 读取或添加到 Realm 的所有对象

  • 所有列表和结果对象

  • 所有 ThreadSafeReference 对象

  • Realm 本身

警告

打开 Realm 时不要删除文件

如果您在域的一个或多个实例处于打开状态时删除域文件或其任何辅助文件,则可能会损坏该域或中断同步。

如果您在开发应用程序时快速迭代,则在进行模式更改时,您可能需要删除而非迁移域文件,Realm 配置提供 DeleteRealmifMigrationRealmifMigrationRealneeded 参数帮助解决这种情况。

将此属性设置为 true 时,SDK 会在需要迁移时删除 Realm 文件。然后,您可以创建与新模式匹配的对象,而不是为开发或测试数据编写迁移区块。

do {
// Delete the realm if a migration would be required, instead of migrating it.
// While it's useful during development, do not leave this set to `true` in a production app!
let configuration = Realm.Configuration(deleteRealmIfMigrationNeeded: true)
let realm = try Realm(configuration: configuration)
} catch {
print("Error opening realm: \(error.localizedDescription)")
}

在实际操作中,有两个安全时间可删除 Realm 文件:

  1. 在应用程序启动时,其时 Realm 尚未打开。

  2. 仅在显式 autorelease 池中打开 Realm 后,即可确保解除分配其中的所有对象。

使用 Device Sync 时,可能会遇到客户端重置错误。在客户端重置期间,应用必须删除 Realm 的本地副本,并从 Atlas App Services 后端下载更新的版本。

因为已同步 Realm 存储在本地,可以离线使用,所以删除已同步 Realm 可能会丢失数据。如果客户端已向 Realm 写入内容,而 Realm 尚未上传这些变更,则在您删除已同步 Realm 时,客户端将丢失这些数据。当客户端长时间没有网络连接时,或者发生 Sync 错误,需要重新启动 Sync 时,Realm 可能无法上传变更。

有关如何处理这种情况的详细信息,请参阅客户端重置。

← 配置并打开 Realm - Swift SDK