核心数据建模:多对多桥

时间:2011-03-30 02:53:16

标签: objective-c core-data many-to-many

此问题可能会在此之前提出,但我不相信我已经理解了解决方案。这是针对iOS的Objective-C,Core Data中的问题。

我将建模一个类似Twitter的用户跟随关系,一个用户可以跟随许多人,然后被许多人关注。关注本身具有createTime,pending和level等属性 - 这意味着,我不能仅仅让User具有跟随者和跟随者之类的双向关系,例如:

  

用户<< - >>用户

但是添加一个实体,跟随,跟随和关注的关系。

  

用户< - >>关注< - >用户

以下是两个问题:

  1. 这是最佳做法吗?

  2. 如果是这样,如何写一个[aUser valueForKeyPath:...];获取他/她的粉丝或朋友(被跟踪)。

2 个答案:

答案 0 :(得分:2)

这是最佳做法吗?

我不认为这个问题属于“建立最佳实践的情况”的范畴,但它似乎是一个合理的解决方案。

如果是这样,如何写一个[aUser valueForKeyPath:...];取得他/她的追随者或朋友(被跟踪)。

假设Following为执行以下操作的人员提供了follower属性,并为被关注者提供了leader属性。此外,User具有leads属性,用于Following与关注用户的人的关系以及follows属性与用户的Following关系如下。最后,User也有name属性。

考虑到所有这些,为了获得用户的追随者的名字,你可以说:

NSSet * followers = [aUser valueForKeyPath:@“leads.follower.name”];

并获取aUser的人名:

NSSet * leaders = [aUser valueForKeyPath:@“follow.leader.name”];

起初看起来有点奇怪,因为每条路径中的最后两个键都是单数,所以你会从这些键路径中获得回调。但是,由于leads属性返回一组Following个对象,leads.follower返回包含每个对象的用户的集合,leads.follower.name返回包含名称的集合这些对象的用户。

答案 1 :(得分:0)

我找到了一个很好的例子,说明你在这里想要完成的事情,并且认为我会分享。检查“多对多关系”标题下的here。您应该找到一个使用Person实体和FriendInfo实体的示例,该实体更详细地描述了您正在使用的模式。

注意:链接指向Apple核心数据编程指南的“关系和提取的属性”部分,这些部分可能会或可能不会被没有Apple Developer帐户的人使用,当然可能会有所变化。