Realm
Swift是否有某种方法可以安全地删除并使用新密钥创建新的加密Realm文件(但文件名相同)?
我的用例:当用户退出我的应用程序时,我删除了加密的.realm文件,因为加密密钥也将被删除:
static func deleteRealm() { let configuration = Realm.Configuration() let path = NSURL.fileURLWithPath(configuration.path!) .URLByDeletingLastPathComponent? .URLByAppendingPathComponent("encrypted.realm") .path! if NSFileManager.defaultManager().fileExistsAtPath(path) { // Delete realm try! NSFileManager.defaultManager().removeItemAtPath(path) } } }
(不幸的是,调用realm.deleteall()是不够的,因为有一个新密钥)
但是当另一个用户在注销后立即登录并尝试使用新密钥重新初始化加密的Realm DB时,如下所示:
static func intializeRealm() -> Realm! { let realmKey = generateSecureRealmKey() var configuration = Realm.Configuration() configuration.path = RealmDB.getRealmPath() configuration.encryptionKey = NSData(bytes: realmKey,length: realmKey.count) return try! Realm(configuration: configuration) }
我得到这个例外:
*** Terminating app due to uncaught exception 'RLMException',reason: 'Realm at path '****/encrypted.realm' already opened with different encryption key'
即使已删除领域文件,似乎仍在使用旧的配置缓存(因为文件名相同).
sample encryption app for Realm Swift使用autoreleasepool来解决这个问题,但对于更大的应用程序来说这似乎不可行.或者是吗?我是否必须用autoreleasepool包围所有领域的用途?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。