CoreData用户定义的数据库结构?

时间:2013-04-14 01:51:19

标签: ios core-data

所以,我刚刚开始研究iOS库存应用程序,我希望它非常灵活。我想要的是让用户能够定义产品类别,然后定义其自由度,即颜色,大小,图像,样式等。我知道我可以通过设计包含这些属性的数据模型来实现这一目标但是,用户可能并不总是需要每一个,并且(更麻烦)可能需要我没有想到的其他属性(如材料或品牌)。有没有办法使用CoreData构建这种灵活的数据模型?我确信我可以使用plist来实现它,但我想利用iCloud和NSFetchedResultsController,更不用说谓词等了。

这甚至不是可以使用数据库实现的东西吗?现在我正在研究这个问题,似乎我可能会受到强制结构的限制......如果用户在添加了记录后更改了属性怎么办?我是否必须处理迁移商店?啊。

...

好的,这是另一种方法,也许有人可以评论这是否疯狂。我开始思考,用户可能添加的所有属性基本上都是相同的类型 - 它们有一个字符串标记(属性的名称,例如'color')和一系列字符串值(例如'red', '木炭','蓝色'等)。那么为什么不建立实体的这些关系而不是属性呢?所以,现在我的对象模型中有三个实体:MerchCategory,这是我们正在谈论的商品类型,MerchItem,它是清单中的单个项目,Dimension 1}}这是物品可能具有的品质。

MerchItem具有sku属性,与Dimension的多对多关系,以及与MerchCategory的多对一关系。

Dimension具有namevalue属性,以及categoriesitems多对多关系。

这是一个看似合理的架构吗?在我看来,我将能够通过查看他们的名称来查询每个维度,并通过查看他们的值来获取每个配置的计数...并且用户将能够添加新的维度而不会与NSEntityDescription混淆。想法?

4 个答案:

答案 0 :(得分:1)

How to add attributes to an existing Core Data entity (object) programmatically?

你正在咬一个非常大的任务。可以办到。 FileMaker正在使用FileMaker MobileBento for iPad执行此操作。但我怀疑他们有更多的人投入到这些产品中。

答案 1 :(得分:0)

我认为您需要使用NSEntityDescription以及NSPropertyDescription以编程方式将实体添加到NSManagedObjectModel,以向您的实体添加属性。我不确定迁移是如何运作的。

答案 2 :(得分:0)

只要您不需要通过这些属性获取,就可以编写代码来添加和减去自定义属性,将它们存储在nsarray中并将它们全部捆绑到nsdata中并将其存储在核心数据中。您可以简单地创建一个具有所需数量的固定属性的实体,以便能够对其进行排序和获取,并将其余部分存储在一个nsdata属性中。

答案 3 :(得分:0)

我正在研究类似的东西,我正在考虑创建一个名为“Properties”的新核心数据类,因此我可以将我的对象设置为“与许多属性的关系”。每个Property都有核心数据字符串类型属性:“attribute”,“type”和“value”。

我认为应该提供足够的灵活性来动态添加产品属性。如果我碰巧实现了这个,我会在这里发布