Iphone 如何在Objective-C中动态创建实体?

Iphone 如何在Objective-C中动态创建实体?,iphone,cocoa-touch,core-data,merge,nsmanagedobjectcontext,Iphone,Cocoa Touch,Core Data,Merge,Nsmanagedobjectcontext,我正在构建一个iPad应用程序,需要用户动态创建实体。我已经有3个程序使用的实体。 你能帮我写代码吗 我想了解整个结构根据我的理解,我必须创建新的managedObjectModel,添加新实体,然后将其与现有实体合并,对吗?没错--您需要创建一个NSEntityDescription对象数组,然后在新的托管对象模型上调用setEntities:。然后,最后,将该模型与内置模型合并 但请注意,一旦模型被用于创建托管对象上下文(或用于存储),就不能更改它。模型更改后,您需要创建新的存储和上下文。虽

我正在构建一个iPad应用程序,需要用户动态创建实体。我已经有3个程序使用的实体。
你能帮我写代码吗

我想了解整个结构根据我的理解,我必须创建新的managedObjectModel,添加新实体,然后将其与现有实体合并,对吗?

没错--您需要创建一个NSEntityDescription对象数组,然后在新的托管对象模型上调用
setEntities:
。然后,最后,将该模型与内置模型合并


但请注意,一旦模型被用于创建托管对象上下文(或用于存储),就不能更改它。模型更改后,您需要创建新的存储和上下文。

虽然可以动态创建新实体和新模型,但实际上这非常复杂。如果没有其他问题,则必须将任何现有的持久化数据迁移到新模型和新的持久化存储文件。我强烈建议不要尝试这样做,尤其是当您刚开始使用核心数据时

您有以下选择:

首先,你确定你真的需要一个新的实体吗?刚开始使用核心数据的人通常会将实体误认为是托管对象。实体与托管对象的关系就像类与实例的关系一样。实体是用于创建对象图的抽象。它们实际上并不包含数据。您需要新实体的时间非常非常少

其次,如果确实需要某种动态实体,通常最好将动态实体分解为多个固定子实体,然后使用关系创建虚拟实体。例如,您需要一个动态的人物“实体”,因此您在模型中创建了多个实体,每个实体包含人物的一个属性。您可以有一个
字段
实体,该实体将有一个
字段名
属性,然后是一个
字段值
属性。然后有一个实际的
实体,该实体没有属性,只与必要的
字段
对象有关系。您可以向任何人添加所需的任何字段,然后通过将关系遍历到其字段来重建虚拟人对象


然而,我相当怀疑你是否需要这种灵活性。这种需要是非常罕见的。我会后退一步,看看您认为用户可能需要输入哪些动态数据

+1我认为您的推断是正确的,OP混淆了添加另一个托管对象(公共)和添加另一个实体(荒谬的罕见)的需要。