我想为两个实体创建一个联接表(badgeprofile):hubprofile和badge。见下图
swift - 核心数据连接表多对多关系 - 对象创建-LMLPHP
问题1:我想知道如何创建一个“badgeprofile”对象。此对象应映射到一个“HubProfile”和一个“Badge”对象
问题2:一旦创建了“badgeprofile”对象,以后“hubprofile”和“badge”都可以访问该对象。(例如:hubprofile.badgeprofile)我该怎么做?
以下是实体的类:
Hub配置文件

class HubProfile: NSManagedObject {
  @NSManaged var id: NSNumber?
  @NSManaged var name: String?
  @NSManaged var hubBadgeProfiles: NSOrderedSet?
}

徽章
class Badge: NSManagedObject {
  @NSManaged var id: NSNumber?
  @NSManaged var name: String?
  @NSManaged var score: NSNumber?
  @NSManaged var badgeProfiles: NSOrderedSet?
}

徽章简介
class BadgeProfile: NSManagedObject {
  @NSManaged var id: NSNumber?
  @NSManaged var badge: Badge?
  @NSManaged var hubProfile: HubProfile?
}

P.S:我知道我不需要创建一个联接表,并且可以在HubProfileBadge之间建立多对多的关系。但是我想创建join表,因为它可以很容易地与后端数据库交互。

最佳答案

要创建联接表对象,请执行以下操作:
创建它的方式与创建任何其他实体的方式相同,例如通过

NSEntityDescription.insertNewObjectForEntityForName(...)

然后只需添加要链接的对象。
badgeProfile.hubProfile = hubProfile
badgeProfile.badge = badge

我劝你不要用定购的电视机。它们复杂且容易出错。举个例子,上面的问题真的让人头疼。相反,在BadgeProfile实体中使用一个number属性来自己跟踪订单。
访问连接的对象
这里没什么特别的。获取个人资料的所有徽章:
profile.hubBadgeProfiles.map { $0.badge! }

(我认为您的属性名称选择不当。我建议badges和另一侧的等效物,对于profiles实体Badge
获取特定徽章:
profile.badges.filter { $0.badge!.name == "Gold" }.first as? Badge

使用模拟模式向另一个方向移动。

09-10 08:53
查看更多