gpt4 book ai didi

cocoa - 核心数据迁移失败,错误为 "Can' t find model for source store”,但存在源的 ManagedObjectModel

转载 作者:行者123 更新时间:2023-12-03 16:03:44 25 4
gpt4 key购买 nike

我有一个使用 core-data 的 cocoa 应用程序,它现在是其托管对象模型的第四个版本。

我的托管对象模型包含抽象实体,但到目前为止,我已成功通过创建适当的映射模型并使用 addPersistentStoreWithType:configuration:options:error 创建持久存储并将 NSMigratePersistentStoresAutomaticallyOption 设置为 YES 来实现迁移。

NSDictionary *optionsDictionary = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
NSURL *url = [NSURL fileURLWithPath: [applicationSupportFolder stringByAppendingPathComponent: @"MyApp.xml"]];
NSError *error=nil;
[theCoordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:optionsDictionary error:&error]

当我从模型版本 3 迁移到模型版本 4 时,这工作正常,这是一个涉及向多个实体添加属性的迁移。现在,当我尝试添加新的模型版本(版本 5)时,对 addPersistentStoreWithType 的调用返回 nil 并且错误保持为空。从 4 到 5 的迁移涉及添加单个属性。

我正在努力调试问题并已检查以下所有内容;

  1. 源数据库实际上是版本 4,而 persistenceStoreCoordinator 的托管对象模型是版本 5。

  2. 4->5 映射模型以及版本 4 和 5 的托管对象模型存在于我构建的应用程序的资源文件夹中。

  3. 我尝试过各种模型升级路径。奇怪的是,我发现从早期版本 3 -> 5 升级可以工作..但是从 4 -> 5 升级失败。

  4. 我尝试添加自定义实体迁移策略来迁移属性正在更改的实体...在本例中,我覆盖了方法 beginEntityMapping:manager:error: 。有趣的是,当迁移有效时(即当我从 3 迁移到 4 或从 3 迁移到 5 时),该方法确实会被调用,但在失败的情况下( 4 到 5 ),它不会被调用。

我几乎不知道该往哪里走。任何有助于调试此问题的想法将不胜感激。

最佳答案

我在这里回答我自己的问题,以防它对某人有帮助。

关键问题是,当我达到对象模型的版本 4 时,我还在项目中添加了一个额外的托管对象模型。这个附加模型与我的主模型是分开的,仅用于在另一个线程上创建缓存并包含与主模型无关的数据。

愚蠢的是,我仍然使用初始化了我的 ManagedObjectModel

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain]

在我的例子中,它创建了一个模型,其中包含我的主模型以及其他模型中的实体。这些不需要的实体在我的数据库中有其版本哈希值。当 core-data 然后去寻找与所有这些哈希值匹配的托管对象模型时,它自然无法找到它。

就我而言,解决方案是在迁移之前手动清理我的数据库文件(从不需要的实体中删除版本哈希)..然后将我的 ManagedObjectModel 加载代码更改为;

NSString *path = [[NSBundle mainBundle] pathForResource:@"MyDataModel" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];

关于cocoa - 核心数据迁移失败,错误为 "Can' t find model for source store”,但存在源的 ManagedObjectModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4532115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com