获取属性与关系(核心数据 - iPhone)

9

我是一名新的iPhone开发者(大约4个月左右),现在开始学习Core Data。

在Dave Mark的《Beginning iPhone 3 Development》一书中,提到了获取属性和关系之间的主要区别是获取属性允许惰性加载。然而,我看过其他资源和这个网站上被接受的答案,它们表明关系也允许惰性加载。

例如,如果我有一个Department对象与Employee有一个多对多的关系,那么在给定的Department上进行获取操作时,我不希望将所有相关的员工都加载到内存中。

如果能得到权威的答案,并解释其他的差异,我会非常感激,因为这对任何设计都有明显的影响。

此外,如果有人能指向一个合理的Core Data资源,它是一个清晰且适合初学者的指南(我曾经是一名Java开发人员,但我对iPhone-Way还很陌生...),我也会非常感激。

3个回答

13

从“Core Data编程指南”中,获取属性代表“弱的单向关系”。它们只是允许您使用获取谓词定义属性的值,而不是像关系一样直接对其进行建模。

一个主要的区别是,获取属性不像直接关系那样是实时或动态的。当您的对象图中发生影响获取属性值的更改时,您必须显式地通过手动刷新包含获取属性的对象来保持获取属性最新。


好的,所以人们必须手动调用播放列表对象上的获取方法来获取所有歌曲;当一首歌被删除时,播放列表在“歌曲”重新获取后才会知道这一点,这个属性被称为“fetched property“?这有意义吗? - openfrog

5
请查看Core Data中的故障处理:faulting
使用故障处理,当从持久存储区检索单个雇员对象时,它的经理、部门和报告关系最初由故障表示。虽然故障是Department类的实例,但尚未被实现——它的任何持久实例变量都尚未被设置。
如果您向Department对象发送消息以获取其名称,则该故障将触发——在这种情况下,Core Data会为您执行获取所有对象属性的操作。

那现在这是什么意思呢?一个正常的关系不能指向一个错误吗? - openfrog
我不明白你的问题。 - Alex Reynolds
11
他不理解你的回答。 - Michael Morrison
我不理解这些注释。 - Ivan

2
我强烈推荐Marcus Zarra的Core Data。我几个月前开始学习这本书,虽然假定你有一些Objective-C的经验,但对于初学者来说也相当容易上手。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接