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表示从
图片
用户
的链接将断开。这并不意味着对象被删除。就对象图而言,这意味着这些对象之间不再存在链接无操作表示源已删除,目标始终存在,并且它继续指向不再存在的对象。因此,与取消不同,您需要手动断开该链接。如果不是,则可能会出现图形不一致。尽量避免这种关系

如果你想知道其他事情,请告诉我

编辑

请查看以获取更多信息