我的领域文件会在一段时间后自动清除所有数据

Posted

技术标签:

【中文标题】我的领域文件会在一段时间后自动清除所有数据【英文标题】:My realm file auto clear all data after time 【发布时间】:2021-05-06 03:58:39 【问题描述】:

我的应用 (ios) 使用领域数据库来保存数据。但是,一些用户反馈他们丢失了数据?他们说他们在遇到这个问题之前使用了该应用很长时间。

最后,我上周遇到了这个麻烦。我在缓存目录中创建了一个目录名称 RealmFolder。在此目录中配置文件领域。

我猜可能系统会自动清除缓存目录中的所有文件(尚未验证)。我尝试研究但仍然找不到解决方案,因为我无法重新出现此错误。现在我有了一个新文件夹,新领域 URL。

这是我的代码配置领域:

class LocalDAO 
    static let shareInstance = LocalDAO()
    var DBName : String = ""
    private var realmUrl : URL
        get 
            let cacheUrl = FileManager.default.urls(for: FileManager.SearchPathDirectory.cachesDirectory, in: FileManager.SearchPathDomainMask.userDomainMask)[0]
            let url = cacheUrl.appendingPathComponent("RealmFolder").appendingPathComponent(self.DBName)
            return url
        
    

        var config = Realm.Configuration(
        schemaVersion: SCHEMA_VERSION,
        migrationBlock:  migration, oldSchemaVersion in
            if (oldSchemaVersion < SCHEMA_VERSION) 
            
        )

    func createRealmDirection()
        let cacheUrl = FileManager.default.urls(for: FileManager.SearchPathDirectory.cachesDirectory, in: FileManager.SearchPathDomainMask.userDomainMask)[0]
        let directionName = "RealmFolder"
        let path = cacheUrl.appendingPathComponent(directionName)
        if !FileManager.default.fileExists(atPath: path.path)
            try? FileManager.default.createDirectory(atPath: path.path, withIntermediateDirectories: true, attributes: nil)
        
    

    func setDefaultRealmForUser(userId: String) 
        self.DBName = "DB_\(userId).realm"
        config.fileURL = realmUrl
        Realm.Configuration.defaultConfiguration = config
    

【问题讨论】:

***.com/questions/54746421/… 如果需要,操作系统可以清除此文件夹。 谢谢,但我检查了我的磁盘空间,它是免费的 36Gb 为什么不使用(安全的)默认 Realm 存储位置? 【参考方案1】:

Appple Documentation

应将应用文件放在何处

防止 iOS 设备上的同步和备份进程占用 很长一段时间,请选择放置文件的位置。存储的应用程序 大文件可能会减慢备份到 iTunes 或 iCloud。这些应用程序还可以消耗大量用户的 可用存储空间,这可能会鼓励用户删除应用程序或 禁用将该应用程序的数据备份到 iCloud。考虑到这一点,你 应根据以下准则存储应用数据:

将用户数据放入 Documents/。用户数据通常包括任何文件 你可能想要向用户公开——你可能想要用户的任何东西 创建、导入、删除或编辑。对于绘图应用程序,用户数据 包括用户可能创建的任何图形文件。对于文本编辑器, 它包括文本文件。视频和音频应用程序甚至可能包括 用户下载以供以后观看或收听的文件。

将应用创建的支持文件放入库/应用程序支持/ 目录。通常,此目录包含应用程序的文件 用于运行,但应该对用户隐藏。这 目录还可以包含数据文件、配置文件、模板 以及从 app bundle 加载的资源的修改版本。

记住 Documents/ 和 Application Support/ 中的文件是有支持的 默认向上。您可以通过调用从备份中排除文件 -[NSURL setResourceValue:forKey:error:] 使用 NSURLIsExcludedFromBackupKey 键。任何可以重新创建的文件或 下载的必须从备份中排除。这尤其 对于大型媒体文件很重要。如果您的应用程序下载视频 或音频文件,请确保它们不包含在备份中。

将临时数据放在 tmp/ 目录中。临时数据包括 您不需要长时间保留的任何数据 时间。完成后请记住删除这些文件,以便 他们不会继续占用用户设备上的空间。这 当您的应用程序不可用时,系统会定期清除这些文件 跑步;因此,您不能依赖这些文件在 您的应用程序终止。

将数据缓存文件放在 Library/Caches/ 目录中。缓存数据可以 用于任何需要持续时间超过临时的数据 数据,但不如支持文件长。 一般来说, 应用程序不需要缓存数据才能正常运行,但它 可以使用缓存数据来提高性能。缓存数据示例 包括(但不限于)数据库缓存文件和瞬态, 可下载的内容。 注意系统可能会删除缓存/ 目录以释放磁盘空间,因此您的应用程序必须能够 根据需要重新创建或下载这些文件

所以您应该使用另一个文件夹作为数据库位置或添加数据恢复功能

【讨论】:

我按照你说的做了,但还是出现上述现象

以上是关于我的领域文件会在一段时间后自动清除所有数据的主要内容,如果未能解决你的问题,请参考以下文章

烧瓶应用程序数据库数据会在一段时间后自动删除,这些数据部署在 heroku 中

为啥实体框架会在一段时间后忘记我的数据库模型中的内容?

Chromecast 视频播放会在一段时间后永远挂起

为啥 spring-boot 和 postgres 连接会在一段时间后断开?

labview停止循环为啥波形会清除一次

如何在不打开领域文件的情况下检查我的领域架构版本?