- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我依靠加密 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/
一小部分用户遇到此错误: Caused by io.realm.exceptions.RealmFileException Unable to open a realm at path 我已经进行了一
我依靠加密 Realm 将某些数据存储在用 Swift 编写的应用程序中。有时我会遇到这样一种情况,我会删除给定 Realm 并创建一个新 Realm ,以确保在某些状态之间不会保留任何数据。 我自己
我是一名优秀的程序员,十分优秀!