CoreData指导

时间:2010-11-04 15:47:15

标签: iphone database performance core-data

所以我有这个问题我想解决 - 我想知道是否有人可以评论/帮助我的方法。问题是,我已经部分解决了,但其余的我不太确定。

这是交易:

我有一个相当大的在线数据库,我想在第一次启动应用程序时加载。之后,如果存在新版本,我只会加载它。

我使用xml解析器来解析数据并将所有数据输入到我的数据模型中。该数据库由数千种产品组成,所有产品均由各种属性描述。

无论如何,我很容易在数据库中保存数千种产品,然后按需检索数据。

我遇到了如何对它们进行分类以及如何保存类别数据的问题。有一个主要类别,即Hi-Fi有几个子类别 - 比如'立体声','调谐器','手机'等......

如何最好地保存此信息,该类别包含15个子类别,而这些类别中的每一个又有30个产品,同时确保性能并将处理时间保持在最低限度。我不想检查所有2000个产品是否需要在每次打开新的表视图时在某个表视图中显示它们。

赞赏任何有关该apporach的提示。

2 个答案:

答案 0 :(得分:1)

您需要两个实体:ProductCategory

Category有一个名为subcategories的多对多关系,目标实体为Category。反向关系可以称为parentCategoryCategory还有一个名为products的多对多关系。 Product会有一个名为category的反向关系(如果产品属于多个类别,则为categories

现在,您可以通过检查其products属性来获取给定类别的所有产品。如果要在子类别中包含所有产品,可以使用如下谓词执行获取请求:

[NSPredicate predicateWithFormat:@"category == %@ OR category IN %@", category, category.subcategories];

答案 1 :(得分:-1)

我认为您可以通过包含三个实体的Core Data模式来解决它:Product,Category和SubCategory。

产品具有目标类别的关系类别和目标SubCategory的关系子类别。

类别包含与目标产品的多对多关系产品和具有目标SubCategory的多对多关系子类别。

SubCategory具有与目标产品的多对多关系产品和具有目标类别的关系类别。

定义这些关系时,请记住同时指定反向关系。

现在,只需加载相关类别并访问products属性,即可获得属于特定类别的所有产品的列表。还应该可以使用NSFetchRequest for Product,并使用谓词指定所需的类别。关于性能和内存要求哪个最好我不能说,所以你只需要测试哪种方法效果最好。