Добавьте Базовый Индекс Данных к определенным Атрибутам через миграцию

По причинам производительности я хочу установить Индексируемый Атрибут на некоторые мои объекты. Я создал новую базовую версию модели данных для выполнения изменений. Базовые Данные обнаруживают изменения и перемещают мою модель в новую версию, однако, НИКАКИЕ ИНДЕКСЫ не СГЕНЕРИРОВАНЫ.

Если я воссоздаю базу данных с нуля, индексы там. Я сверился с Браузером SQLite и на iPhone и на Средстве моделирования. Проблема только происходит, если база данных в предшествующем формате уже там.

Существует ли способ вручную добавить индексы? Записать некоторый sql для этого? Или я пропускаю что-то? Я уже сделал некоторые более критические миграции, никакие проблемы там. Но те, которые пропускают индексы, прослушивают меня.

Спасибо за помощь!

25
задан westsider 23 March 2011 в 23:03
поделиться

2 ответа

У меня была такая же проблема.

Согласно Руководству по управлению версиями и миграции данных Core Data Model :

Взгляд Core Data на управление версиями это то, что он интересуется только особенности модели, влияющие на упорство.

Простое добавление индекса к существующему свойству модели не приводит к автоматическому запуску миграции, поскольку Core Data не рассматривает две схемы вашей модели как разные (индекс не влияет на постоянство).

Однако вы можете заставить Core Data видеть вашу модель как измененную, добавив модификатор хэша версии к вашему недавно проиндексированному атрибуту. Это вызвало облегченную миграцию для обновления моих существующих баз данных.

51
ответ дан 28 November 2019 в 20:47
поделиться

Какую стратегию миграции вы использовали?

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

Я предлагаю просто добавить модель сопоставления, проверить, указаны ли изменения индекса, и выполнить автоматическую облегченную миграцию:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
    [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,nil];
NSPersistentStore *migratedStore = [persistentStoreCoordinator addPersistentStoreWithType:nil configuration:nil URL:storeURL options:options error:&error];
migrationWasSuccessful = (migratedStore != nil);

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

0
ответ дан 28 November 2019 в 20:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: