【问题标题】:connection between NSManagedObjectModel and my .xcdatamodel file?NSManagedObjectModel 和我的 .xcdatamodel 文件之间的连接?
【发布时间】:2015-10-14 02:37:09
【问题描述】:

存档很容易,现在 CoreData 的概念让我感到困惑。

声明的 NSManagedObjectModel 和我实际的 xcdatamodel 文件之间有什么联系?

我声明了 NSManagedObjectModel、NSManagedObjectContext 和相应的 NSPersistentStoreCoordinator,并将它们全部连接起来。在这个过程中,我没有看到任何线索表明声​​明的 NSManagedObjectModel 属性与我的 xcdatamodel 文件有任何关系。

只有在我发起 NSFetchRequest 时,我才告诉它我的目标实体的名称,也就是我的 NSManagedObjectContext。

这样就行了?我不必告诉任何人我的 xcdatamodel 文件的名称,而只需告诉目标实体的名称? NSFetchRequest 是否必须在我的所有 xcdatamodel 文件中搜索某个实体?如果我在两个不同的 xcdatamodel 中有两个同名实体怎么办?

【问题讨论】:

  • 请阅读文档link。 Core Data 非常复杂,不是一天就能学会的。如果您想在以后避免头痛,请阅读文档。相信我,它会对你有好处。
  • 没有什么是神奇的,尽管它有时会如此出现。显示您使用的代码。

标签: core-data


【解决方案1】:

当您构建您的应用程序时,.xcdatamodel 文件被编译生成一个.mom 文件,该文件被合并到应用程序包中。前缀保持不变,因此“myApplication.xcdatamodel”被编译为“myApplication.mom”。

如果您在包中获得此文件的 URL(例如使用NSBundleURLForResource:withExtension 方法),您可以使用initWithContentsOfURL 初始化您的NSManagedObjectModel 实例。或者,这可以解释明显没有任何连接,NSManagedObjectModel 实例可以使用mergedModelFromBundles 类方法创建,该方法使用给定包中的所有模型(.mom 文件)。

【讨论】:

  • 谢谢。这完美地回答了我的问题:)
【解决方案2】:

NSManagedObjectModel 是代表您在数据模型中创建的实体的对象(.xcdatamodeld)。数据模型编辑器有点像源代码编辑器,而 NSManagedObjectModel 是您拥有的代表编译模型的东西。

NSManagedObjectModel 包含对模型中所有实体的引用,这些实体表示为 NSEntityDescription 的实例。模型对象的用途是

  1. 以便Core Data 可以理解持久存储文件。该模型告诉 Core Data 期望什么实体。
  2. 这样,Core Data 操作(如获取请求)就可以配置为正确访问持久存储文件 - 例如,仅使用实际存在的实体。
  3. 以便可以创建 NSManagedObject 的实例以反映数据模型中的实体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 2015-12-22
    • 2019-01-29
    • 2013-01-17
    • 2020-08-28
    相关资源
    最近更新 更多