为啥 isConfiguration:compatibleWithStoreMetadata 会返回 yes,即使使用了映射模型?
Posted
技术标签:
【中文标题】为啥 isConfiguration:compatibleWithStoreMetadata 会返回 yes,即使使用了映射模型?【英文标题】:Why does isConfiguration:compatibleWithStoreMetadata return yes, even though a mapping model is used?为什么 isConfiguration:compatibleWithStoreMetadata 会返回 yes,即使使用了映射模型? 【发布时间】:2016-12-02 22:54:20 【问题描述】:我正在开发一个应用程序,它使用以下方法来确定是否需要迁移核心数据:
- (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。因此,应用映射模型的代码永远不会被调用。
Core Data 是否以某种方式自动应用映射模型?
从最新版本迁移数据库时,这一切正常。但是我测试了从旧版本的数据库迁移,它无法设置新属性的值。
我想尝试在教程中找到的递归核心数据迁移方法,但如果 isConfiguration:compatibleWithStoreMetadata 返回 YES,它将不会做任何事情。
我很乐意提供任何必要的附加信息。
【问题讨论】:
【参考方案1】:在调用 isConfiguration:compatibleWithStoreMetadata 之前,我的代码中的其他地方存在一个错误,它用新版本的模型覆盖了旧版本的模型。
所以 isConfig... 正确返回了 yes。
我的坏!!!
【讨论】:
以上是关于为啥 isConfiguration:compatibleWithStoreMetadata 会返回 yes,即使使用了映射模型?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?