代码之家  ›  专栏  ›  技术社区  ›  Sahbi Belgacem

如何捆绑领域文件

  •  0
  • Sahbi Belgacem  · 技术社区  · 7 年前

    我正在跟踪 realm documentation 关于如何绑定领域文件。我已成功地将所有必要的数据加载到加密文件中,但似乎无法压缩文件并将其移动到其他位置。

    密码

        // AppDelegate
        fileprivate func compactRealm() {
            if let realmPath = Realm.Configuration.defaultConfiguration.fileURL {
                let destination = realmPath.deletingLastPathComponent().appendingPathComponent("compact.realm")
                if FileManager.default.fileExists(atPath: realmPath.path) {
                    do {
    //                    let encryption = Constants.key.data(using: String.Encoding.utf8)
                        try Realm().writeCopy(toFile: destination)
                        print("File normally compressed !")
    
                    } catch {
                        fatalError(error.localizedDescription)
                    }
                } else {
                    print("Realm file does not exist")
    //                fatalError()
                }
    
            }
    
        } 
    

    后果

    错误域=io。领域代码=2“无法在路径“/var/mobile/Containers/Data/Application/B4D487F8-5AEC-4906-B989-7DB953095A35/Documents/default.realm”打开领域:不是领域文件。”UserInfo={错误代码=2,NSFilePath=/var/mobile/Containers/Data/Application/b4487f8-5AEC-4906-B989-7DB953095A35/Documents/default.realm,底层=非领域文件,NSLocalizedDescription=无法在路径“/var/mobile/Containers/Data/Application/b4487f8-5AEC-4906-B989-7DB953095A35/Documents/default.realm”打开领域:非领域文件。}

    我已检查:领域文件确实存在!。

    顺便说一句,我用同样的代码对未加密的文件进行了测试,结果成功了,所以我不知道它对加密的领域文件不起作用!

    1 回复  |  直到 7 年前
        1
  •  0
  •   caseynolan    7 年前

    看来你的线路 try Realm().writeCopy(toFile: destination) 基本上打开默认的领域文件,但没有解密所需的密钥(我假设您在尝试编写压缩副本之前已经在这里对其进行了加密)。

    Realm抱怨无法打开该文件,因为它不是Realm文件(不是,它是它的加扰版本)。

    使用适当的加密密钥打开领域( try Realm(configuration: config) 或类似)和 然后 试着写一份副本。

    来源

    Realm Docs - Encryption

    Realm Docs - Compacting Realms