- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果实体始终在通过合并相关模型创建的 NSManagedObjectModel 中使用,是否可以对单独 NSManagedObjectModel 中定义的实体之间的关系进行建模?
例如,假设模型 1 定义了一个具有(一对一)关系 toBar
的实体 Foo
,而模型 2 定义了一个实体 Bar
code> 与关系(一对一)toFoo
。我将使用 -[NSManagedObjectModel mergedModelFromModels]
构建一个 CoreData 堆栈,合并模型 1 和模型 2。有没有办法在数据建模器中或以编程方式定义这些关系,以便它们的行为就像是模型内关系?
最佳答案
模型 1 和模型 2 都无法在运行时加载,除非它们格式良好,也就是说,除非 toBar
和 toFoo
关系有目的地。此外,如果模型 1 和模型 2 具有相同名称的模型,您将无法从它们创建合并模型;它们不会合并,它们会碰撞,这是一个错误。
但是,您可以手动使用 NSManagedObjectModel
API 加载每个模型并手动创建一个包含来自这两个模型的实体的新模型。 NSEntityDescription
和 NSPropertyDescription
类(及其子类)确实实现了 NSCopying
协议(protocol),因此在大多数情况下,您应该能够从每个组件模型到您的整体模型。
此外,NS*Description
类都支持 userInfo
字典,您可以在 Xcode 的数据建模工具中编辑该字典,您可以使用它来执行诸如标记目标之类的操作作为替身的关系。例如,在模型 1 中,您可以拥有一个带有 userInfo
键 MyRealEntity
的 Bar
实体,并在创建合并模型时检查该实体,作为发出信号以使用真实实体。
您还需要将替代实体与替代实体建立逆向关系;合并后这些将被替换为真实的逆。不过,您不必在所有模型中完全复制您的替代实体;您只需要在实体中的真实模型中使用逆关系。
因此,如果您真正的 Foo
有一个 name
属性,并且您真正的 Bar 有一个 kind
属性,那么您的替代 Foo
和 Bar
不需要这些,只需替代 toBar
和 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*Description
对象的复制是按名称而不是按关系的目标实体和反向实体(以及实体的子实体)的值。因此,虽然模型是可变的(也就是说,在将其设置为 NSPersistentStoreCoordinator
的模型之前),但您可以使用类似这样的技巧将模型分解为多个模型。
关于cocoa - NSManagedObjectModel 中合并模型的跨模型关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/130316/
这是toggleAddProject方法的代码,核心数据代码与Apple的CoreDataBooks示例中的代码几乎相同,但是当我单击添加按钮时,应用程序崩溃并显示entityForName:无法找到
如果实体始终在通过合并相关模型创建的 NSManagedObjectModel 中使用,是否可以对单独 NSManagedObjectModel 中定义的实体之间的关系进行建模? 例如,假设模型 1
我正在使用Core Data,并且在我的应用程序开始时就很难将数据导入数据库。 以下是我遵循的教程中获取的一些代码。 下面概述了我获得SIGABRT的要点。 任何建议或帮助表示赞赏 谢谢 //THIS
我得到错误: Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entit
我有以下要求:使用 .xml 文件中的数据创建并填充 SQLite 数据库,该文件可以随时具有不同的结构,因此我无法使用 Xcode 创建 NSManagedObjectModel,它必须在运行时。我
谁能告诉我有关在 Xcode 中动态构建核心数据模型的教程?我找到的所有教程都基于静态设计,但苹果文档说可以通过编程方式构建模型。遗憾的是,苹果文档集中没有这方面的示例。 最佳答案 您必须初始化一个N
NSManagedObjectModel -versionIdentifiers 的文档说, The Core Data framework does not give models a defaul
有人想要合并多个 NSManagedObjectModel 有几个原因。如果你在网上搜索,所有的回答都是不可能的,或者只有共享一种或多种关系的两个不相关的实体才有可能。请参阅this和 this例如链
我正在尝试在我已经开始的项目中设置核心数据。我已经解决了一些其他错误,但现在已将范围缩小到这个, *** Terminating app due to uncaught exception 'NSIn
我真的不明白为什么我的 map 方法会出错。错误是调用中的额外参数。 这个有效: let url1 = NSURL(string: "123"); let url2 = NSURL(string: "
我正在尝试将我的代码从 Objective-C 转换为 Swift,但是对于 NSManagedObjectModel 我收到此错误: Use of undeclared type NSManaged
这是 viewDidLoad 中 fetchRequest 的代码,该代码来自找到的教程 here只是我以编程方式链接导航 Controller 和 tableview,而不是使用界面生成器。实体 P
我正在使用 SWIFT 以编程方式在核心数据的托管对象模型中创建实体。 当我创建一个 NSEntityDescription 数组并将其传递给 让 managedObjectModel : NSMan
我正在使用 Apple 的 CoreDataBooks 示例项目作为核心数据的学习辅助工具。 我修改了应用程序,以便在加载应用程序时首先显示菜单页面 - 而不是 Books TableView (Ro
我有一个包含 15 个版本的核心数据模型。它有代码可以在发布时逐步从当前商店的版本迁移到最新版本。 关键是调用 NSDictionary* options = @{ NSMigratePers
自从我连接核心数据堆栈并迁移数据库以来,我几个月来一直在一个使用核心数据的项目中顺利进行,昨晚刚刚开始在托管对象模型上出现错误。 我知道它正在做的是尝试在这一行中建立一个托管对象上下文 NSEntit
我有一个项目,当我为 iOS 4.x 构建它时工作正常,但是当我为 iOS 5.x 构建它时它失败并崩溃。澄清一下,4.x 构建可以在 iOS 5.1 上正常运行,但是当我针对 5.0 或 5.1 构
我们在 Appstore 中的实时应用程序崩溃,原因如下 Fatal Exception: NSInvalidArgumentException CoreData: Cannot load NSMan
您好,我正在创建一个应用程序,它需要将我的标签内容中的数据保存到我的核心数据模型中,该模型被命名为 cart.xcdatamodeld,我的实体被命名为 Cartdetail。当我在我的应用程序中按下
当你编写一个使用 CoreData 的静态库时,将一个普通的 .xdatamodeld 文件包含到项目中会是一团糟,因为你不能简单地将它的编译版本 (.momd) 链接到你的二进制文件中,所以最好创建
我是一名优秀的程序员,十分优秀!