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 后,即可确保解除分配其中的所有对象。

您可以使用+[RLMKRealm deleteFilesForConfiguration:error:]类方法删除给定配置的.realm.note.management文件。

@autoreleasepool {
// all Realm usage here -- explicitly guarantee
// that all realm objects are deallocated
// before deleting the files
}
// Get configuration
RLMApp *app = [RLMApp appWithId:YOUR_APP_ID];
RLMUser *user = [app currentUser];
RLMRealmConfiguration *configuration = [user configurationWithPartitionValue:@"some partition value"];
configuration.objectClasses = @[Task.class];
NSError *error = nil;
// Delete realm files for that configuration
[RLMRealm deleteFilesForConfiguration:configuration
error:&error];
if (error) {
// Handle error
}

您可以使用 Realm.deleteFiles(for:) 类方法删除给定配置的 .realm.note.management 文件。

autoreleasepool {
// all Realm usage here -- explicitly guarantee
// that all realm objects are deallocated
// before deleting the files
}
do {
let app = App(id: APPID)
let user = try await app.login(credentials: Credentials.anonymous)
var configuration = user.flexibleSyncConfiguration()
_ = try Realm.deleteFiles(for: configuration)
} catch {
// handle error
}

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

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

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

后退

配置并打开 Realm