2016-12-02 104 views
0

我的工作是使用下面的方法来确定是否需要一个核心数据迁移应用程序:为什么isConfiguration:compatibleWithStoreMetadata返回yes,即使使用映射模型?

- (BOOL)isMigrationNeeded { 
    BOOL isMigrationNeeded = NO; 
    NSError *error; 
    NSDictionary *sourceMetadata = [self sourceMetadata:&error]; 
    if (sourceMetadata != nil) { 
     NSManagedObjectModel *destinationModel = [self managedObjectModel]; 
     isMigrationNeeded = ![destinationModel isConfiguration:nil 
            compatibleWithStoreMetadata:sourceMetadata]; 
    } 

    return isMigrationNeeded; 
} 

在数据库的最新版本中,增加一个属性,需要一个映射模型来设置其值。即使isConfiguration:compatibleWithStoreMetadata返回YES,该属性的值也会正确设置。结果,应用映射模型的代码永远不会被调用。

核心数据是否自动应用映射模型?

当数据库从最新版本迁移时,这一切都正常。但是我测试了从旧版数据库迁移并且未能设置新属性的值。

我想尝试在教程中找到的递归核心数据迁移方法,但如果isConfiguration:compatibleWithStoreMetadata返回YES,它将不会执行任何操作。

我会很乐意提供任何必要的附加信息。

回答

0

我的代码中的其他地方存在一个错误,它在isConfiguration:compatibleWithStoreMetadata被调用之前用新版本的模型重写了旧版本的模型。

所以isConfig ...正确返回是。

我的不好!

相关问题