2013-02-24 42 views
0

我还没有在文档/讨论中找到明确的“否”,但怀疑无法在运行时以编程方式生成CoreData对象。如何动态生成CoreData对象

我想要做的就像在运行代码中执行DDL命令(例如“Create Table”,“Drop Table”等),因为我不知道直到我询问用户有多少列表需求,或者他们需要的数据类型。也许他需要多张桌子。

有谁知道这是否可能?将欣赏指向某些东西的指针。 (也会喜欢学习负面的,所以我可以停止想知道。)

如果在CoreData中不可行,这是否会成为切换到SQLite的原因?

+3

您可以创建一个核心数据“管理对象模型“和”实体描述“(例如,请参阅http://stackoverflow.com/a/13744302/1187415)。但请注意,核心数据是“对象图管理器”,而不是数据库(请参阅,例如http://www.cocoawithlove.com/2010/02/differences-between-core-data-and.html)。因此,对于Core Data,您应该考虑对象及其属性和关系,而不是表格。 – 2013-02-24 11:14:38

+0

我完全同意@MartinR;) – 2013-02-24 11:28:24

+0

非常感谢。我会研究参考。 我也来到http://stackoverflow.com/questions/6379025/customize-core-data-model-at-runtime/6379098#6379098刚才,这似乎是在同一地区(发现有点太迟了,抱歉:-)) – user2037606 2013-02-24 11:45:41

回答

4

您可以在运行时创建整个Core Data模型 - 根本不需要使用Xcode的数据建模器,并且API支持创建和配置模型的每个细节。但它可能不像你想要的那样灵活。虽然您可以创建新的实体描述或修改现有描述,但您只能在之前加载数据存储文件之前执行。一旦你读取和写入数据,你必须考虑数据模型是固定的。在这一点改变它会产生一个异常。

它与典型的SQLite用法不太一样。这有点像SQLite表定义在一个文件中,数据存储在另一个文件中 - 并且可以在加载实际数据之前即时修改表。 (我知道这不是SQLite真正的工作方式,但这基本上是Core Data强制执行的方法)。

如果您希望按照描述修改模型/架构,那么使用直接SQLite访问可能会更好。有一对夫妇的Objective-C的SQLite包装的,允许一个ObjC样式的方法,同时仍然支持SQLite的风格访问:

+0

谢谢。这非常有帮助。 我想我要实现的可以被描述为一个图形化的 数据库前端,对于那些没有(也不需要任何)数据库经验的人来说。您的回复证实了我的印象。再次感谢。 – user2037606 2013-02-25 09:23:13

+0

在托管对象模型启动并运行之后,您可以创建它的副本并修改副本,然后切换到使用新模型 - 全部在运行时。 – 2014-03-27 17:21:52