1

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

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

...

好的,这是另一种方法,也许有人可以评论这是否疯狂。我开始思考,用户可能添加的所有属性基本上都属于同一类型——它们有一个字符串标签(属性的名称,例如“颜色”)和一系列字符串值(例如“红色”、 “木炭”、“蓝色”等)。那么为什么不建立实体的这些关系而不是属性呢?所以,现在我的对象模型中有三个实体:MerchCategory,这是我们正在讨论的商品类型,MerchItem,这是库存中的单个项目,并且Dimension是项目可能具有的质量。

MerchItem具有sku属性,与 具有多对多关系Dimension,与 具有多对一关系MerchCategory

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

这是一个合理的模式吗?在我看来,我将能够通过查看它们的名称来查询每个维度,并通过查看它们的值来获取每个配置的计数......并且用户将能够添加新的而无需使用 NSEntityDescription . 想法?

4

4 回答 4

1

请参阅如何以编程方式将属性添加到现有的核心数据实体(对象)?.

你正在完成一项非常大的任务。可以办到。FileMaker 正在使用FileMaker MobileBento for iPad来做到这一点。但我怀疑他们有更多的人投入到产品中。

于 2013-04-14T02:03:35.673 回答
0

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

于 2013-04-14T02:09:59.473 回答
0

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

于 2013-04-14T01:56:13.243 回答
0

我正在做类似的事情,我正在考虑创建一个名为“属性”的新核心数据类,因此我可以将我的对象设置为“与许多属性有关系”。每个属性都将具有核心数据字符串类型属性:“属性”、“类型”和“值”。

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

于 2015-05-12T17:08:04.603 回答