我是一个新手,很难理解核心数据。
我已经创建了一个应用程序,可以很好地保存到文件管理器,但在其中有大量数据时速度很慢。我想把这个升级为核心数据。
我已经成功地创建了一些实体我的基本类,坚持只是很好,但当我有一个类,有其他类的属性作为数组,我不确定什么方向去有它保存在核心数据。
简单的例子:
class Student {
let name: String
let markbook: [Markbook]
}
class Markbook {
let name: String
let components: [MarkbookComponent]
}
每个学生实例都应该有自己的markbook,每个markbook将有多个markbook组件,可以更新单个学生的标记。
对于我的核心数据Student实体,正确的方法是什么:我是使markbook转换类型来实现markbook数组,还是使markbook实体与Student具有多对多关系?这种多对多的关系会给每个学生带来自己的个人印记吗?
使用关系;你的问题是它们被发明出来的目的。
(尽管可以使用可转换属性来表示对象数组:
- 不可能有其他
NSManagedObjects
(CoreData混淆)的数组; - 你必须自己维护或计算逆关系(在你的例子中,如果你有一个
Markbook
并希望知道它与哪个Student
相关,你必须扫描所有的Student
对象来定位它。)如果你在CoreData中创建一个反向关系,它将被CoreData免费填充和管理);和 - 可转换属性不能被"检查";作为获取请求的谓词的一部分。因此,如果您希望获取所有
Markbooks
和标题为&;english &;的MarkbookComponent
,您必须首先获取所有Markbooks
,然后在内存中过滤它们。
关于关系的基数性,如果每个Student
最多可以有一个Markbook
,则该关系可以为"to- 1";(并且将在类中定义为类型为Markbook
的属性,而不是数组[Markbook]
)。假设每个Markbook
同样只与一个Student
相关,那么反比关系也将是"1 - 1"。
由于每个Markbook
可以有多个MarkbookComponent
,因此将关系建模为"多对多";(然后将在类中定义为一组Markbooks
)。从你的描述中,我不确定MarkbookComponent
是否只能与一个Markbook
相关,或者不止一个:将反向关系建模为"一对一";或";to-many"适当。