gpt4 book ai didi

swift - 无法捕获 `RealmFileException: Realm file decryption failed` 异常

转载 作者:可可西里 更新时间:2023-11-01 00:58:54 35 4
gpt4 key购买 nike

我依靠加密 Realm 将某些数据存储在用 Swift 编写的应用程序中。有时我会遇到这样一种情况,我会删除给定 Realm 并创建一个新 Realm ,以确保在某些状态之间不会保留任何数据。

我自己跟踪加密 key ,因此存在我无意中尝试使用错误加密 key 解密 Realm 的风险,这会引发以下异常:

libc++abi.dylib: terminating with uncaught exception of type realm::RealmFileException: Unable to open a realm at path '/path/to/private.realm': Realm file decryption failed.

因为这意味着我丢失了原始加密 key ,基本上使这个特定 Realm 变得无用,我希望能够删除 Realm 文件并重新开始而不是崩溃。

我按照文档的建议创建 Realm :

do {
var configuration = Realm.Configuration.defaultConfiguration
configuration.encryptionKey = ...
try Realm(configuration: configuration)
}
catch let error {

}

我试过了 this以及捕获 NSException 并将其返回以由 Swift 代码处理的类似方法,但似乎没有直接的方法来实现这一点。这是不可能的,还是我的做法不正确?

最佳答案

您的代码应该可以工作。如果加密 key 错误,则进入 catch block 。然后您可以删除现有文件并重新创建 Realm 。像下面这样:

var configuration = Realm.Configuration.defaultConfiguration
configuration.encryptionKey = getKey()
do {
let realm = try Realm(configuration: configuration)
...
}
catch {
try! NSFileManager().removeItemAtURL(configuration.fileURL!)
let realm = try! Realm(configuration: configuration)
...
}

如果您无法捕捉到错误的加密错误,则可能是使用了旧的 Realm.framework。请更新最新版本的 Realm。

关于swift - 无法捕获 `RealmFileException: Realm file decryption failed` 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38850290/

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