Как лучше всего переместить огромную базу данных .sqlite в новый каталог на старом iOS-устройстве с небольшим объемом памяти? - PullRequest
0 голосов
/ 02 сентября 2018

Для моего последнего обновления приложения я должен переместить базу данных Core Data .sqlite пользователя из каталога Documents в каталог Application Support. Я использую метод migratePersistentStore:toURL:options:withType:error:. Я имею дело с одним пользователем, который каким-то образом сумел сохранить достаточно данных в своей базе данных, так что теперь это колоссальный 9G. Кроме того, ее устройством является iPad Air 1, у которого были проблемы с памятью примерно в то время, когда оно появилось пять или шесть лет назад, а теперь это 2018 год, и она работает на последней версии iOS. Метод migratePersistentStore:toURL:options:withType:error: продолжает сбой приложения с нехваткой памяти. Но у меня нет другого способа получить .sqlite в нужное место. Кто-нибудь может посоветовать мне, как лучше всего подойти к этой ситуации? В идеале, что-то, что я мог бы сделать в своем коде - но я даже был бы признателен за предложения о других способах, которыми я мог бы просто помочь пользователю вручную переместить эту массивную базу данных на этом этапе!

1 Ответ

0 голосов
/ 03 сентября 2018

Полагаю, вы используете migratePersistentStore, потому что это официальный способ сделать это. Это хороший способ, но иногда нужно испачкать руки:

Перемещение базы данных вручную при запуске приложения перед загрузкой

Этот пост показывает, что CoreData может использовать более одного файла, который вам нужно переместить. Вы можете перечислить файлы в каталоге, использовать регулярное выражение, найти все файлы, которые необходимо переместить, переместить их в новое место и затем загрузить CoreData как обычно из нового места.

Это, однако, требует наличия необходимой инфраструктуры для этого. Вы поймете это, если хотите пойти по этому пути.

Вы можете скрыть это за признаком функции, только с кодом, только для определенного пользователя или после сбоя с нехваткой памяти, так что это не повлияет на пользователей, которым это не нужно.

...