coreData为关系表添加其他属性的多对多关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了coreData为关系表添加其他属性的多对多关系相关的知识,希望对你有一定的参考价值。
在我的博客和论坛的核心数据模型中,我有很多关系。每个论坛都可以有多个博客,每个博客都可以属于多个论坛。
我想为博客设置一个独特的bool属性,但这个属性会在每个论坛中有所不同。
是否可以为博客/论坛组合设置多对多的属性?即blogSeen bool变量,对于每个博客/论坛关系都是唯一的。
答案
仅使用Core Data模型中的两个实体无法实现您正在寻找的解决方案。一种解决方案是添加另一个实体,该实体映射Blog
和Forum
之间的另一个关系,以便在读取/查看项目时进行跟踪。
例如,请考虑以下事项:
在这个模型中,添加了Viewed
实体。 Viewed
实体与Blog
和Forum
有一对一的关系。 Blog
/ Forum
实体与Viewed
对象具有反向关系。
每次为特定的Blog
观看/观看/阅读Forum
时,都应创建一个Viewed
实体。 Blog
实体中的Forum
/ Viewed
配对应该是唯一的。这将允许您跟踪每个论坛的博客的已读/未读状态。
这是Forum
为此目的的简单扩展。
extension Forum {
public var readBlogs: [Blog] {
guard let viewed = self.inverseViewed as? Set<Viewed> else {
return []
}
var blogs = [Blog]()
viewed.forEach { (viewed) in
if let blog = viewed.blog {
blogs.append(blog)
}
}
return blogs
}
public var unreadBlogs: [Blog] {
guard let allBlogs = self.blogs as? Set<Blog> else {
return []
}
var unreadBlogs = Array(allBlogs)
self.readBlogs.forEach { (blog) in
if let index = unreadBlogs.index(of: blog) {
unreadBlogs.remove(at: index)
}
}
return unreadBlogs
}
}
以上是关于coreData为关系表添加其他属性的多对多关系的主要内容,如果未能解决你的问题,请参考以下文章
Fluent NHibernate:如何在关系表上映射具有附加属性的多对多关系?