Восстановить пространство из хранилища Core Data SQLite с помощью NSPersistentContainer? - PullRequest
0 голосов
/ 15 февраля 2019

Мое приложение реализует веб-кэш с использованием Core Data с хранилищем SQLite (немного похоже на NSURLCache, но с большим контролем над тем, что кэшируется и когда его можно удалить из кэша).Я могу удалить старые данные из кэша, когда он становится слишком большим, но, конечно, это на самом деле не уменьшает объем дискового пространства, используемого в файловой системе.

Я знаю, что NSPersistentStoreCoordinator может быть передан Опция NSSQLiteManualVacuumOption для создания вакуума SQLite при открытии магазина, и я подумал, что это может быть хорошим способом уменьшить размер файла (даже если мне придется временно закрыть и заново открыть магазин).

Тем не менее, я управляю стеком основных данных через NSPersistentContainer.Есть ли какой-нибудь способ создать одобренный Apple пылесос SQLite с NSPersistentContainer?

Или мне нужно вручную установить стек основных данных, чтобы сделать это?

Или иначе, как еще мне вернутьПространство хранения SQLite при использовании NSPersistentConainer?

ИСПРАВЛЕНИЕ :

Я был частично неправ относительно того, что пространство не восстанавливается автоматически.Даже без установки NSSQLiteManualVacuumOption дисковое пространство восстанавливается автоматически - иногда.Я не уверен, как это работает.Это происходит не сразу и не каждый раз, когда я сохраняю контекст, но когда это происходит, это происходит очень быстро после удаления управляемых объектов из контекста и сохранения контекста.

Если я это сделаюсерия команд удаления / сохранения, пространство между которыми не освобождается.Но если я проверю снова вскоре после этого, пространство было освобождено (иногда).

Возможно, Core Data использует прагму SQLite 'auto_vacuum' по умолчанию?Хотя, если я регистрирую прагмы sqlite, он просто печатает пустой словарь.

1 Ответ

0 голосов
/ 15 февраля 2019

Я думаю, что это должно работать так;Я никогда не делал это сам:

Создайте NSPersistentStoreDescription и установите опции для включения NSSQLiteManualVacuumOption.Присвойте это описание свойству NSPersistentContainer persistentStoreDescriptions перед загрузкой магазина.

...