2010-10-25 3 views
6

Итак, я создал новую версию своей модели данных и сделал ранее необязательное поле не факультативным (давая ему значение по умолчанию). Согласно документации, это должно означать, что моя миграция имеет право на легкую автоматическую миграцию.Легкая миграция основных данных: не удается найти или автоматически вывести модель сопоставления для миграции

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

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 

        [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 

        [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 

Когда мое приложение начинает, однако, я получаю следующее сообщение об ошибке: «Не удается найти или автоматически infer mapping для миграции ".

Кто-нибудь знает, в чем проблема здесь? Любая помощь приветствуется ... спасибо!

+0

Вы также должны указать значение по умолчанию для атрибута, если вы сделаете его необязательным? –

+0

Я не против нег. Я не говорю, почему. Как хромой. –

+0

Ahh, возможно, потому, что я ответил на ваш вопрос в своем описании: «давая ему значение по умолчанию». – elsurudo

ответ

1

Вы, наверное, смотрели на это, но если нет ... Detecting a Lightweight Core Data Migration

С точки зрения другой отладки кода, я нашел этот полезный:

NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"MyDataStore.sqlite"]]; 

NSError *error = nil; 
NSDictionary *sourceMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType 
                   URL:storeUrl 
                   error:&error]; 

if (!sourceMetadata) 
    { 
    DLog(@"sourceMetadata is nil"); 
    } 
else 
    { 
    DLog(@"sourceMetadata is %@", sourceMetadata); 
    } 

И, наконец, это является своеобразной но в Finder вы можете «показать содержимое пакета» для своего приложения, а затем найти папку с именем .momd и внутри нее - файл с именем «VersionInfo.plist». Это было полезно для определения того, что у вас есть и куда вы пытаетесь пойти.

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

+0

Я только что начал с разработки iPhone, и я столкнулся с этой проблемой. Я пробовал ваш код и отображает некоторое значение 'sourceMetadata'. Как я могу использовать это для отладки проблемы, которую у меня есть? – vikmalhotra

+0

@ShiVik - это будет зависеть от проблемы, которую вы отлаживаете ;-) Если вы опубликуете вопрос, я постараюсь помочь. Как правило, это помогло мне заверить, что правильные модели использовались и не были случайно повреждены. Это также помогло мне понять основные данные. – westsider

+0

вот мой вопрос http://stackoverflow.com/q/4745886/206613 – vikmalhotra