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

时间:2011-06-10 12:40:43

标签: ios core-data

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

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

但是一旦创建了模板,人们就可以使用它们来映射模板,我称之为评估模板。模板可以多次使用。评估将包含日期(系统生成)以及已选择此特定模板的项目。

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

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

我正在努力弄清楚如何在不重复模板的情况下在核心数据模型中创建和存储此信息。 (从SQL背景中苦苦挣扎!)在SQL中,这将涉及记录每个itemid及其选择状态的评估表。

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

由于

1 个答案:

答案 0 :(得分:0)

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

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

因此,我们可以清理您现有的模型,如:

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中读取了一个密钥路径,您可以立即告诉您正在遍历两对多关系,而无需了解有关数据模型的任何其他信息。

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

在任何一种情况下,解决方案都是创建一个Evaluation实体,该实体可以与OfferItem形成关系。

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

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
}

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

请注意,您最终如何在UI中显示所有这些内容与数据模型无关。掌握了对象后,您可以根据当前使用的视图需求对其进行排序或排列。

一些离别建议:核心数据不是SQL。实体不是表格。对象不是行。属性不是列。关系不是联接。核心数据是一个对象图管理系统,可能会或可能不会持久保存对象图,并且可能会或可能不会使用远远落后的SQL来执行此操作。试图用SQL术语来思考核心数据将导致你完全误解核心数据并导致更多的悲伤和浪费时间。

基本上,忘记了解SQL的一切。这些知识无助于您了解核心数据,并会积极阻碍您对核心数据的理解。