未调用NSEntityMigrationPolicy子类方法

use*_*816 2 iphone cocoa core-data objective-c

我正在尝试从一个.xcdatamodel文件迁移到另一个。我有一个NSEntityMigrationPolicy子类,其名称已在xcode-> .xcmappingmodel文件->实体->“自定义策略”字段中输入。

我运行我的应用程序,该应用程序成功打开并运行了我的数据的先前版本,因此我只能假定基本迁移已奏效。但是我的NSEntityMigrationPolicy子类方法没有被调用,所以我可以运行更多的迁移代码。

@implementation TestMigrationPolicy

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

有谁知道为什么我的它可能不会被调用?我是核心数据迁移的新手,但现在我茫然不知为什么这种行为不符合我的预期。

如果有帮助,我将像这样创建持久性存储。

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]) {
Run Code Online (Sandbox Code Playgroud)

Sim*_*onB 5

我知道这个问题很旧,但这可能会对其他人有所帮助!

这是因为设置了选项NSInferMappingModelAutomaticallyOption-这意味着正在运行轻量级迁移,而不是使用映射模型。删除此选项,将* NSMigratePersistentStoresAutomaticallyOption *保留在原位,所有选项均应正常工作。

  • 啊,太酷了,谢谢!…但是如果我也想进行自动映射怎么办?因此,我使用的是模型版本16。我希望从15手动迁移到16,但是较早的迁移可以是自动的。 (2认同)