Слышал от Apple и их решение ... ммм ... сделай это сам. Таким образом, в основном, если у вас есть большая БД в вашем приложении, сделайте все от вас зависящее, чтобы убедиться, что ваши миграции могут быть выполнены с помощью логической / облегченной модели. Bleargh.

оим приложением находится потенциально очень большое хранилище данных CoreData (оно может легко превышать 30 МБ). Я начал замечать проблемы с памятью при использовании автоматической миграции (addPersistentStoreWithType:configuration:URL:options:error:) поэтому я начал изучать методы переноса небольших частей хранилища, чтобы избежать всего накопления объекта CoreData, которое происходит, когда вы переносите все сразу.

Это обсуждается вофициальная документация однако в разделе «Несколько проходов» их предлагаемый подход состоит в том, чтобы разделить миграцию по типу сущности, то есть создать несколько моделей сопоставления, каждая из которых переносит подмножество типов сущностей из полной модели данных.

Единственная проблема - что если один тип сущности составляет большинство вашего хранилища данных? Если следовать подходу, рекомендованному Apple, весь этот тип сущности будет по-прежнему выполняться за одну миграцию, и проблемы с памятью, вероятно, сохранятся.

Существуют ли какие-либо методы для фактической миграции поднабора сущностей определенного типа, чтобы гарантировать, что вам не хватит памяти при попытке перенести их все?

Заранее благодарю за любую помощь.

РЕДАКТИРОВАТЬ: После более глубокого копания, я обнаружил, что рекомендуемое Apple разделение БД на типы объектов на самом деле работает только для не связанных объектов (какобсуждается здесь), так что это даже менее вероятно, чтобы решить проблемы реальной БД, чем я думал, когда я первоначально написал этот пост.

Я начинаю думать, что миграции CoreData, которые на самом деле выполняются с помощью NSMigrationManager, теперь вообще не масштабируются, и у вас практически не может быть БД, размер которой превышает 20-30 МБ, если вы хотите иметь возможность переносить ее на текущую версию. устройства iOS поколения. Единственный жизнеспособный подход, по-видимому, состоит в том, чтобы полностью замкнуть все NSMigrationManager / NSMappingModel и написать миграцию полностью в коде. Похоже, огромный упуск со стороны Apple, если это действительно так.

Ответы на вопрос(1)

Ваш ответ на вопрос