为啥 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,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?