2010-09-06 2 views
1

Я пытаюсь перенести из одного файла .xcdatamodel в другой. У меня есть подкласс NSEntityMigrationPolicy, имя которого я ввел в поле xcode-> .xcmappingmodel file -> entity -> «custom Policy».Методы подкласса NSEntityMigrationPolicy не называются

Я запускаю свое приложение, которое успешно открывает и запускает предыдущую версию моих данных, поэтому я могу только предположить, что основная миграция сработала. ОДНАКО мои подклассы NSEntityMigrationPolicy не вызываются, поэтому я могу запустить дополнительный код миграции.

@implementation TestMigrationPolicy 

- (BOOL)beginEntityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError * *)error 
{ 
    NSLog(@"this log is never shown!!!!"); 
    return YES; 
} 

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

Если это поможет, я создаю постоянный магазин, как это ..

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
         [NSNumber numberWithBool:YES], 
         NSMigratePersistentStoresAutomaticallyOption, 
         [NSNumber numberWithBool:YES], 
         NSInferMappingModelAutomaticallyOption, 
         nil]; 


NSError *error = nil; 
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
NSLog(@"storeUrl %@", storeUrl); 

if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) { 

ответ

4

Я знаю, что этот вопрос старый, но это может помочь другим!

Это потому, что у вас есть опция NSInferMappingModelAutomaticallyOption set - это означает, что выполняется легкая миграция, а не использование вашей модели сопоставления. Удалите эту опцию, оставив * NSMigratePersistentStoresAutomaticallyOption * на месте, и все должно работать.

+0

Ах, это круто, спасибо! ... но как насчет того, если я также хочу, чтобы произошло автоматическое отображение? Итак, я на модельной версии 16. Я хочу, чтобы миграция вручную с 15 до 16, но более ранние миграции могут быть автоматическими. – Benjohn

0

Я сталкивался с такой же проблемой. В моем случае это происходит, потому что Core Data не может найти файл скомпилированного файла сопоставления данных (файл с расширением cdm) в результирующем наборе приложений. Когда я вручную переместил этот файл из вложенного пакета в корень пакета приложений (MyApp.app \ NestedBundle.bundle \ MyMapping.cdm -> MyApp.app \ MyMapping.cdm), все сработало нормально. Но такой макет файла нарушает текущую логику структуры пакета приложений, поэтому я попытаюсь сделать Core Data для просмотра моего файла cdm во вложенном пакете.

UPD: Похоже, что лучшим решением является использование пользовательской инициализации для процесса миграции. Очень хороший пример можно найти здесь - http://media.pragprog.com/titles/mzcd/code/ProgressiveMigration/AppDelegate.m. Я принял этот код для поиска во всех пакетах, и он отлично работает.

Смежные вопросы