【问题标题】: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
    }
}

【问题讨论】:

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

标签: ios swift realm


【解决方案1】:

Appple Documentation

应将应用文件放在何处

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

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

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

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

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

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

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

【讨论】:

  • 我按照你说的做了,但还是出现上述现象
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多