繁体   English   中英

如何在核心数据中存储许多项目标志

[英]How to store many item flags in core data

我试图在我的 iPad 应用程序中执行以下操作。 我有一个结构,允许人们创建我们称之为“模板”的分组列表。 所以顶级CoreOffer(有Title)可以有很多组(有grouptitle/displayorder)可以有很多项目(有ItemTitle,DisplayOrder)。 如下所示。 这很好用,我可以完美地创建模板。

图片链接http://img405.imageshack.us/img405/9145/screenshot20110610at132.png

但是,一旦创建了模板,人们就可以使用它们来对抗模板,我将其称为评估。 一个模板可以多次使用。 评估将包含一个日期(系统生成)以及该特定模板中的哪些项目已被选中。

下面的示例,人们将能够检查下面屏幕中的特定行,这就是评估。

图片链接http://img41.imageshack.us/img41/8049/screenshot20110610at133.png

我正在努力弄清楚如何在不复制模板的情况下在核心数据 model 中创建和存储这些信息。 (来自 SQL 背景的挣扎。)在 SQL 这将涉及类似于记录每个 itemid 及其选择状态的评估表。

我希望它很简单,但我就是无法理解它!

谢谢

您要做的第一件事是清理数据 model 中的命名。 请记住,您在这里处理的是唯一对象,而不是 SQL 中的表、列、行、连接等的名称。 因此,您不需要在所有内容前加上“Core”(除非您有多种 Offer、Group 和 Item 实体。)

实体名称以大写字母开头,属性名称和关系名称以小写字母开头。 所有实体名称都是单数的,因为实体的建模不取决于实体的实例数量或实体的关系类型。 一对一关系名称应该是单数和一对多复数。 这些约定使代码易于阅读并传达有关数据 model 的信息,而无需查看实际图形。

因此,我们可以清理您现有的 model ,例如:

Offer{
  id:string
  title:string
  groups<-->>Group.offer
}

Group{
  title:string
  displayOrder:number
  offer<<-->Offer.groups
  items<-->>Item.group
}

Item{
  title:string
  displayOrder:number
  isSelected:Bool
  group<<-->Group.items
}

现在,如果您在代码中读取AnOfferObj.groups.items的键路径,您可以立即告诉您正在遍历两个对多关系,而无需了解有关数据 model 的任何其他信息。

我不清楚您希望您的“评估”“复制”什么。 您似乎希望他们“复制”任何Offer的整个图表,或者您希望他们“复制”一组Item对象。

无论哪种情况,解决方案都是创建一个可以与OfferItem建立关系的Evaluation实体。

在第一种情况下,它看起来像:

Evaluation{
  title:string
  offer<<-->Offer.evaluations
}

Offer{
  id:string
  title:string
  groups<-->>Group.offer
  evaluations<-->>Evaluation.offer
}

...在第二种情况下:

Evaluation{
  title:string
  items<<-->>Item.evaluations
}

Item{
  title:string
  displayOrder:number
  isSelected:Bool
  group<<-->Group.items
  evaluations<<-->>Evaluation.items
}

请注意,在这两种情况下,您都不会复制或复制任何内容。 您只是在创建对现有对象组的引用。 在第一种情况下,您将通过遍历 offer.groups.items 的键路径找到特定Evaluation offer.groups.items的所有相关Item对象。 在第二种情况下,您只需遍历Evaluation object 与itemsitems关系的关键路径。

请注意,最终如何在 UI 中显示所有这些内容与数据 model 无关。 一旦您掌握了这些对象,您就可以根据当前使用的视图的需要对它们进行排序或以其他方式排列它们。

一些离别建议:Core Data 不是 SQL。 实体不是表格。 对象不是行。 属性不是列。 关系不是连接。 Core Data 是一个 object 图管理系统,它可能会或可能不会保留 object 图,并且可能会或可能不会在幕后使用 SQL 来执行此操作。 试图在 SQL 术语中考虑 Core Data 将导致您完全误解 Core Data 并导致很多悲伤和浪费时间。

基本上,忘记你所知道的关于 SQL 的一切。 这些知识不会帮助您理解 Core Data,并且会积极阻碍您对它的理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM