Iphone 在核心数据中建立反向关系模型
核心数据中的关系让我很困惑。我读了又读,但我就是不明白。我想这对我阅读时经常感到沮丧没有帮助。我想做一些非常简单的事情: 我有一个名为Iphone 在核心数据中建立反向关系模型,iphone,objective-c,ios,core-data,relationship,Iphone,Objective C,Ios,Core Data,Relationship,核心数据中的关系让我很困惑。我读了又读,但我就是不明白。我想这对我阅读时经常感到沮丧没有帮助。我想做一些非常简单的事情: 我有一个名为Pictures的实体和一个名为User的实体。我希望用户能够喜欢并标记图片中的其他人,因此每个Picture实体有两种关系: 图片实体: 用户浏览图片(对许多人): Destination: User Inverse: Picture Destination: User Inverse: Picture 在图片中重新命名的用户(对许多人): Destina
Pictures
的实体和一个名为User
的实体。我希望用户能够喜欢并标记图片中的其他人,因此每个Picture
实体有两种关系:
图片实体:
用户浏览图片(对许多人):
Destination: User
Inverse: Picture
Destination: User
Inverse: Picture
在图片中重新命名的用户(对许多人):
Destination: User
Inverse: Picture
Destination: User
Inverse: Picture
但这在使用中造成了如此多的混乱,我甚至无法开始描述。这是不一致的。有人喜欢某张图片会将其作为标记用户删除,而喜欢某张图片会将您喜欢的图片从所有其他图片中删除。啊,真是一团糟……我的结构看起来还好吗?我将如何对此进行建模?我甚至不知道这是否可能,但听起来您对两种关系使用了相同的反向目标。不要那样做 正确的方法应该是这样的:
我不知道这是否可能,但听起来你在两种关系中使用了相同的反向目标。不要那样做 正确的方法应该是这样的:
除了回答马蒂亚斯·鲍奇之外,我还可以给你一些理解人际关系的提示 首先,在处理核心数据时,必须从对象的角度来考虑。通过此astraction,您可以将模型视为一个图形,其中节点是您在模型中创建的实体,而关系是这些实体之间的链接 现在,关于关系,它们可以是不同的类型:一对一、一对多和多对多。根据您拥有的关系类型,可以在对象图中创建不同的链接。例如,如果一个
用户
与图片
有一对多关系,这意味着对象的每个实例(类型为NSManagedObject
)都有一个指向不同图片
的链接<代码>用户作为源,图片s作为目标
核心数据使用反向关系来保持图形的一致性。特别是,它们在处理删除规则时非常有用
每个关系都有一个关联的删除规则Cascade意味着如果您删除一个对象,例如用户
,核心数据将为您删除链接到该对象的对象(图片)拒绝不允许删除链接到图片的用户
Nullify表示从图片
到用户
的链接将断开。这并不意味着对象被删除。就对象图而言,这意味着这些对象之间不再存在链接无操作表示源已删除,目标始终存在,并且它继续指向不再存在的对象。因此,与取消不同,您需要手动断开该链接。如果不是,则可能会出现图形不一致。尽量避免这种关系
如果你想知道其他事情,请告诉我
编辑
查看了解更多信息。除了Matthias Bauch回答之外,我可以给你一些理解人际关系的提示
首先,在处理核心数据时,必须从对象的角度来考虑。通过此astraction,您可以将模型视为一个图形,其中节点是您在模型中创建的实体,而关系是这些实体之间的链接
现在,关于关系,它们可以是不同的类型:一对一、一对多和多对多。根据您拥有的关系类型,可以在对象图中创建不同的链接。例如,如果一个用户
与图片
有一对多关系,这意味着对象的每个实例(类型为NSManagedObject
)都有一个指向不同图片
的链接<代码>用户
作为源,图片s作为目标
核心数据使用反向关系来保持图形的一致性。特别是,它们在处理删除规则时非常有用
每个关系都有一个关联的删除规则Cascade意味着如果您删除一个对象,例如用户
,核心数据将为您删除链接到该对象的对象(图片)拒绝不允许删除链接到图片的用户
Nullify表示从图片
到用户
的链接将断开。这并不意味着对象被删除。就对象图而言,这意味着这些对象之间不再存在链接无操作表示源已删除,目标始终存在,并且它继续指向不再存在的对象。因此,与取消不同,您需要手动断开该链接。如果不是,则可能会出现图形不一致。尽量避免这种关系
如果你想知道其他事情,请告诉我
编辑
请查看以获取更多信息