使用NSPersistentContainer从核心数据SQLite存储中回收空间?

使用NSPersistentContainer从核心数据SQLite存储中回收空间?,sqlite,caching,core-data,vacuum,Sqlite,Caching,Core Data,Vacuum,我的应用程序使用核心数据和SQLite存储实现了一个web缓存(有点像NSURLCache,但对缓存内容以及何时可以从缓存中清除缓存有更多的控制)。当缓存中的旧数据变得太大时,我可以将其清除,但这当然不会减少文件系统中使用的存储空间 我知道可以向NSPersistentStoreCoordinator传递打开存储时执行SQLite真空的选项,我认为这可能是减少文件大小的一个好方法(即使我必须暂时关闭并重新打开存储) 但是,我正在通过NSPersistentContainer管理核心数据堆栈。有没

我的应用程序使用核心数据和SQLite存储实现了一个web缓存(有点像NSURLCache,但对缓存内容以及何时可以从缓存中清除缓存有更多的控制)。当缓存中的旧数据变得太大时,我可以将其清除,但这当然不会减少文件系统中使用的存储空间

我知道可以向NSPersistentStoreCoordinator传递打开存储时执行SQLite真空的选项,我认为这可能是减少文件大小的一个好方法(即使我必须暂时关闭并重新打开存储)

但是,我正在通过NSPersistentContainer管理核心数据堆栈。有没有办法用NSPersistentContainer制作苹果认可的SQLite真空吸尘器

或者我必须手动建立核心数据堆栈才能做到这一点

或者,在使用NSPersistentConainer时,我应该如何回收SQLite存储空间

更正

关于空间没有被自动回收,我有一部分是错的。即使没有设置NSSQLiteManualVacuumOption,磁盘空间也会被自动回收——有时是这样。我不确定这是怎么回事。它不会立即发生,也不是每次我保存上下文时都会发生,但当它发生时,它会在从上下文中删除托管对象并保存上下文后很快发生

如果执行一系列删除/保存命令,则不会释放它们之间的存储空间。但如果我稍后再次检查,空间已被回收(有时)


也许核心数据默认使用“auto_vacuum”SQLite pragma?虽然如果我记录sqlite pragmas,它只会打印一个空字典。

我认为它应该这样工作;我自己从来没有做过:


创建并设置选项以包括。加载存储之前,请将此说明分配给
NSPersistentContainer
的属性。

谢谢。。。我不知道为什么我自己看不到这一点。另外值得注意的是,我错了,空间没有被自动回收。即使没有设置NSSQLiteManualVacuumOption,磁盘空间也会自动回收。我不确定这是怎么回事。