如何在 Objective-C 中动态创建实体?
Posted
技术标签:
【中文标题】如何在 Objective-C 中动态创建实体?【英文标题】:How to create Entity dynamically in Objective-C? 【发布时间】:2010-11-30 14:15:51 【问题描述】:我正在构建一个 iPad 应用程序,我需要用户在其中动态创建实体。我已经有 3 个实体可供程序使用。 你能帮我写代码吗?
我想根据我的理解来了解整个结构,我必须创建新的 managedObjectModel,添加新的实体,而不是将它与现有的合并,对吗?
【问题讨论】:
【参考方案1】:虽然在实践中可以动态创建新实体和新模型,但这非常复杂。如果不出意外,您必须将任何现有的持久数据迁移到新模型和新的持久存储文件。我强烈建议您不要尝试这样做,尤其是在您刚开始使用 Core Data 时。
你确实有选择:
首先,您确定您确实需要一个新实体吗?刚开始使用 Core Data 的人经常将实体误认为托管对象。实体之于托管对象,就像类之于实例一样。实体是用于创建对象图的抽象。它们实际上不包含数据。您需要新实体的时候非常非常罕见。
其次,如果您确实需要某种动态实体,通常最好将动态实体分解为许多固定的子实体,然后使用关系创建一个虚拟实体。例如。您需要一个动态的 Person“实体”,因此您在模型中创建了多个实体,每个实体都包含该人的一个属性。你可以有一个Field
实体,它有一个fieldName
属性,然后是一个fieldValue
属性。然后有一个实际的 Person
实体,它没有属性,但只是与必要的 Field
对象的关系。您可以向任何人添加所需的任何字段,然后通过将关系移至其字段来重构虚拟人对象。
不过,我很怀疑您是否需要这种灵活性。这种需求是非常罕见的。我会退后一步,看看您认为用户可能需要输入哪些动态数据。
【讨论】:
+1 我认为您推断出 OP 在需要添加另一个托管对象(常见)和需要添加另一个实体(非常罕见)之间感到困惑是正确的。【参考方案2】:没错——您将创建一个 NSEntityDescription 对象数组,然后在新的托管对象模型上调用 setEntities:
。然后,最后,您将该模型与您的内置模型合并。
但请注意,一旦模型用于创建托管对象上下文(或用于存储),您就无法更改模型。模型更改后,您需要创建新的存储和上下文。
【讨论】:
以上是关于如何在 Objective-C 中动态创建实体?的主要内容,如果未能解决你的问题,请参考以下文章