【问题标题】:Application is crashing when using data model migration in Core Data在 Core Data 中使用数据模型迁移时应用程序崩溃
【发布时间】:2013-12-13 20:03:16
【问题描述】:

我正在尝试弄清楚如何让我的应用能够从一个数据模型版本迁移到另一个版本。

我在网上阅读了一大堆资源,发现使用 Magical Record 真的很有用,尤其是 MR_coordinatorWithAutoMigratingSqliteStoreNamed 方法。

一切看起来都很好,直到我开始做一些测试,当我注意到应用程序在以下情况下崩溃时。

所以这是我的数据模型版本...当我使用文档版本或 document4 版本时一切正常...但是当我选择 document3 版本时,我遇到了这个崩溃:

非常感谢任何形式的帮助!

【问题讨论】:

  • 该错误告诉您它试图从多个模型中合并,并且每个模型中的 VideoInfo 实体都不同。检查您的应用程序包中是否包含其他模型。
  • 嗯...我正在尝试迁移模型,如果您从我的屏幕截图中注意到我确实有 3 个不同版本的模型,并且确实 VideoInfo 实体已更改...但正如我所说仅当我使用介于第一个版本和最后一个版本之间的版本时才会发生错误
  • 是的,我看到了,但是您是否还有其他模型,而不仅仅是上面显示的模型的不同版本,它以某种方式包含在应用程序包中。打开编译好的app bundle并查看

标签: objective-c macos cocoa core-data core-data-migration


【解决方案1】:

使用迁移时,您必须从 .momd 包手动创建数据模型。因此,对于在应用程序委托中创建的 managedObjectModel 访问器方法,您需要对默认实现的内容稍作更改:

- (NSManagedObjectModel *)managedObjectModel {

    if (managedObjectModel != nil) {
        return managedObjectModel;
    }

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

    return managedObjectModel;
}

here 有一个很好的解释。

【讨论】:

  • 我实际上正在这样做......它并没有解释为什么我可以轻松加载我的数据模型的第一个和最后一个版本,并让我的应用程序正常工作,但没有版本两者之间似乎工作正常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 2012-09-06
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多