如何防止备份带有外部文件的 Core Data 数据库?
Posted
技术标签:
【中文标题】如何防止备份带有外部文件的 Core Data 数据库?【英文标题】:How can I prevent a Core Data database with external files from being backed up? 【发布时间】:2013-06-02 22:00:33 【问题描述】:我们有一个使用 Core Data 来存储数据的应用。一些数据来自服务器,大小可变,虽然通常很小,但也可能很大(几兆字节)。我们使用启用了“允许外部存储”的二进制数据字段来存储此数据。
我们的应用因违反规则 2.23 而被拒绝,因为我们正在存储可以从服务器重新下载的数据,并且没有将其标记为从备份中排除。
好的,很公平,所以我想将我们的数据库标记为从备份中排除。标记数据库本身很容易:
BOOL succ = [storeURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error];
if (!succ)
NSLog(@"Error setting %@ to be excluded from backups: %@", storeURL, error);
但这仅涵盖 SQLite 文件本身。 Core Data 存储外部文件时,会将它们存储在单独的目录中:
.../Private Documents/MyDatabase.sqlite
.../Private Documents/.MyDatabase_SUPPORT/_EXTERNAL_DATA/(files here)
我需要将外部存储的文件标记为不可备份。我可以在 .MyDatabase_SUPPORT 文件夹上设置 NSURLIsExcludedFromBackupKey,但我没有看到任何支持的方式来获取此文件夹的名称。
我可以自己构建它,但我不喜欢依赖这个实现细节。是否有任何受支持的方法可以找出 Core Data 将数据库的外部文件存储在哪里?
【问题讨论】:
【参考方案1】:创建一个子目录,在该子目录中创建数据库,然后在子目录上设置 NSURLIsExcludedFromBackupKey 属性。这样子目录中的任何内容,包括隐藏的 SUPPORT 目录,都将从备份中排除。
【讨论】:
以上是关于如何防止备份带有外部文件的 Core Data 数据库?的主要内容,如果未能解决你的问题,请参考以下文章
Core Data 删除外部存储实体不会释放 iCloud 中的空间