【问题标题】:Core data migration involving a new entity and a to-many relationship涉及新实体和一对多关系的核心数据迁移
【发布时间】:2023-03-24 16:05:01
【问题描述】:

我正在尝试向我的核心数据模型添加一个新实体(例如 B,具有两个“双重”属性),并与现有实体(例如 A)创建可选的多对多关系。我创建了包含新实体 B、现有实体 A 和一对多关系 A ->> B 的新模型修订版。这个新模型是默认模型。我创建了一个从 v2 到 v3 的映射模型(v1 -> v2 迁移工作正常,只是实体 A 的数据类型发生了变化),但没有为 A 与 B 的关系指定值表达式,也没有为 B 的属性指定值表达式。

当我运行应用程序时,我在尝试实例化托管对象模型managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain]; 时收到以下错误。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0'.

问题可能是我没有在映射模型中为A与B的关系指定值表达式,但我认为没有必要,因为B是可选的,并且在模型的v2中不存在。如果我必须为关系指定值表达式,我该如何为不存在的(因为它在模型的 v2 中不存在)可选关系指定?

非常感谢任何帮助。

PS - 还有一个问题 - 是否需要映射模型,或者自动迁移是否足够智能以处理新实体和关系?

【问题讨论】:

  • 我确定这是迁移的问题;使用新的核心数据启动工作正常。
  • 想不通,所以我重新开始。以为我做了和以前一样的事情,但这次它有效。我所做的:i)创建了一个反向关系 A > B,ii)自动生成 B 实现文件,iii)从 v2 映射到 v3,没有为关系指定任何值表达式,我也没有指定从 v2 到 v3 的迁移策略(对于 v1 到 v3 是),iv)在 A 中手动添加 @property 以与 B 建立关系。希望这对其他人有所帮助。

标签: iphone ios core-data relationship core-data-migration


【解决方案1】:

我刚刚在自己的项目中解决了这个问题。当你有多个版本的数据模型时,[NSManagedObjectModel mergeModelFromBundles:nil] 效果不好。它试图包含所有这些,但它不应该。

尝试使用类似的东西:

- (NSManagedObjectModel *)managedObjectModel {

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

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

    return managedObjectModel;
}

对于深入的故事检查: http://iphonedevelopment.blogspot.com/2009/09/core-data-migration-problems.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-20
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    相关资源
    最近更新 更多