可可 – 来自合并模型的NSManagedObjectModel中的跨模型关系?

可可 – 来自合并模型的NSManagedObjectModel中的跨模型关系?,第1张

概述如果在通过合并相关模型创建的NSManagedObjectModel中始终使用实体,可以建立在单独的NSManagedObjectModels中定义的实体之间的关系吗? 例如,说模型1定义了一个具有关系(一对一)toBar的实体Foo,并且模型2定义了一个具有关系(一对一)toFoo的实体条.我将使用 – [NSManagedObjectModel mergedModelFromModels],合 如果在通过合并相关模型创建的NSManagedobjectModel中始终使用实体,可以建立在单独的NSManagedobjectModels中定义的实体之间的关系吗?

例如,说模型1定义了一个具有关系(一对一)tobar的实体Foo,并且模型2定义了一个具有关系(一对一)toFoo的实体条.我将使用 – [NSManagedobjectModel mergedModelFromModels],合并模型1和模型2构建一个CoreData堆栈.有没有办法在数据建模器或编程中定义这些关系,以便它们表现得像模型间关系一样?

解决方法 模型1和模型2都不能在运行时加载,除非它们格式正确 – 也就是说,除非tobar和toFoo关系具有目的地.此外,如果模型1和模型2具有相同名称的模型,您将无法从中创建合并的模型;他们不会合并,他们会碰撞,这是一个错误.

但是,您可以手动使用NSManagedobjectModel API加载每个模型,并手动创建一个包含两者的实体的新模型. NSEntityDescription和nspropertyDescription类(及其子类)确实实现了NScopying协议,因此在大多数情况下,您应该能够将属性从每个组件模型复制到整个模型.

此外,NS *描述类都支持您可以在Xcode的数据建模工具中编辑的用户信息字典,您可以使用它来做一些事情,例如将关系的目的地标记为备用.例如,在模型1中,您可以拥有一个具有userInfo密钥MyRealEntity的bar实体,并在创建合并模型时检查该实体,作为使用真实实体的信号.

您还需要与您的备用实体建立独立的反向关系;这些将在合并后被真正的反转代替.尽管如此,您不必完全复制所有型号的备用实体;您只需要在实体中的真实模型中使用的反向关系.

因此,如果您的真实Foo具有名称属性,并且您的真实bar具有一个实体属性,则您的Foo和bar将不再需要这些,只需要连接到bar和ToFoo关系.

这里有一些代码演示了我在说什么:

- (NSManagedobjectModel *)mergeModelsReplacingDuplicates:(NSArray *)models {    NSManagedobjectModel *mergedModel = [[[NSManagedobjectModel alloc] init] autorelease];    // General strategy:  For each model,copy its non-placeholder entitIEs    // and add them to the merged model. Placeholder entitIEs are IDentifIEd    // by a MyRealEntity key in their userInfo (which names their real entity,// though their mere existence is sufficIEnt for the merging).    NSMutableArray *mergedModelEntitIEs = [NSMutableArray arrayWithCapacity:0];    for (NSManagedobjectModel *model in models) {        for (NSEntityDescription *entity in [model entitIEs]) {            if ([[entity userInfo] objectForKey:@"MyRealEntity"] == nil) {                NSEntityDescription *newEntity = [entity copy];                [mergedModelEntitIEs addobject:newEntity];                [newEntity release];            } else {                // Ignore placeholder.            }        }    }    [mergedModel setEntitIEs:mergedModelEntitIEs];    return mergedModel;}

这是因为在核心数据中复制NS *描述对象是以关系的目标实体和反向(以及实体的子实体)为名而不是副值.因此,当一个模型是可变的 – 也就是说,在设置为NSPersistentStoreCoordinator的模型之前,您可以使用这样的技巧将模型分解成多个模型.

总结

以上是内存溢出为你收集整理的可可 – 来自合并模型的NSManagedObjectModel中的跨模型关系?全部内容,希望文章能够帮你解决可可 – 来自合并模型的NSManagedObjectModel中的跨模型关系?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1018316.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存