Core data 核心数据:我在正确的轨道上吗?为包含多个阵列的数据(如加速计数据)建立数据模型

Core data 核心数据:我在正确的轨道上吗?为包含多个阵列的数据(如加速计数据)建立数据模型,core-data,ios5,attributes,datamodel,storing-data,Core Data,Ios5,Attributes,Datamodel,Storing Data,我正在从事一个涉及大量数据的项目,起初我在plist中完成了所有工作,我意识到这已经失控,我必须学习核心数据。我仍然不能完全确定我是否可以在核心数据中做我想做的事情,但我认为这应该是可行的。我已经建立了一个数据模型,但我不确定这样做是否正确。如果你认为你能帮上忙,请继续读下去,如果我走对了方向,请告诉我。请容忍我,因为我正在尽可能彻底地解释它 我已经在根级别设置了属性的基本对象;比如说一个人的名字、出生日期等,非常简单。您在模型中设置了一个类似于“Person”的实体,您可以在数据中保存任意数量

我正在从事一个涉及大量数据的项目,起初我在plist中完成了所有工作,我意识到这已经失控,我必须学习核心数据。我仍然不能完全确定我是否可以在核心数据中做我想做的事情,但我认为这应该是可行的。我已经建立了一个数据模型,但我不确定这样做是否正确。如果你认为你能帮上忙,请继续读下去,如果我走对了方向,请告诉我。请容忍我,因为我正在尽可能彻底地解释它

我已经在根级别设置了属性的基本对象;比如说一个人的名字、出生日期等,非常简单。您在模型中设置了一个类似于“Person”的实体,您可以在数据中保存任意数量的实体,并将其作为数组检索,对吗?它可以根据个人的属性进行排序,比如他们被添加到数据库的日期

现在我有点困惑的是,当我想和每个人存储几个不同的数据集合时。例如,课程和相关考试分数的列表。在plist中,我会存储一组字典,这些字典按照评估的日期进行排序。我在我的数据模型中设置它的方式是,我添加了一个名为“Tests”的实体和一个从人到测试的“多对多”关系,然后当我提取时,我得到一个NSSet,我可以再次按时间戳排序?有更好的方法吗

类似地,此人可能有一组数字数据数组(您可以随时间绘制的数据类型,例如Nike+存储您的跑步数据,如距离与时间,一个人可能有多次跑步与之关联,因此有一组数组,每个数组都有自己的关联收集日期)。我设置它的方式有点不同,有一个“Runs”属性,只有一个timestamp属性,它通过一个to-many关系从Person连接到Person,与之相反的是“forPerson”。然后,运行实体通过一个对多关系连接到另一个实体,该关系具有存储数字数据和时间的属性。这将再次说明,我将使用时间/顺序属性对它们进行排序

所以我的主要问题是,使用诸如timestamp之类的内部属性对集合进行排序是否是从核心数据加载到“数组”中的正确方法。与此相比,关于如何在核心数据中存储NSArray的搜索论坛/堆栈溢出似乎过于复杂,让我感觉我误解了一些东西


谢谢你的帮助。很抱歉,我不熟悉核心数据,我认为在开始编写获取/保存数据的方法之前,正确设置数据模型是必不可少的。如有必要,我可以设置一个示例模型来演示这一点,并发布它的图片。

默认情况下,CoreData将为您提供NSSET。如果需要排序数组,可以使用描述符调用AllObject或SortedArray将其转换为数组。关系描述中的“ordered”属性为您提供托管对象中的SensorDeredSet。散列集提供了更快的添加、访问和成员资格检查,并对排序进行了惩罚(相对于有序集)。

是的,我清楚地意识到了对多关系,因为我在问题中多次引用了它。我也做了我的家庭作业,搜索了相关的教程,但没有找到任何完全符合我想要做的,因为我想让它起作用,所以我在这里寻求帮助。我想问的是,这是否是在核心数据中存储阵列的正确方法。我最近了解到NSSet不允许重复,这可能是我想做的事情的一个问题。当您在数据模型中选中“已排序”框时,它是基于什么排序的?什么时候加的?我想我读得太快了。阅读您在这里的评论,这个问题的一个更简洁的版本可能是:“如何获得核心数据中多对多关系的数组而不是集合?”答案是核心数据存储集合,您可以使用AllObject从集合中创建数组。您可以使用SorterDarRayUsingDescriptor创建排序数组。你不必担心独特性。如果将某些内容添加到相关表中,它将显示在父表的集合中。即使所有属性都相同,子项也将具有唯一的id。Ordered将为您提供一个SensorDeredSet,它就像一个具有快速成员资格测试的数组(但添加速度比NSSet慢得多)。是的,这是添加的顺序。谢谢!那么,让Ordered保持未选中状态,只按存储保存时间和日期的属性进行排序是否更好?