coreData为关系表添加其他属性的多对多关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了coreData为关系表添加其他属性的多对多关系相关的知识,希望对你有一定的参考价值。

在我的博客和论坛的核心数据模型中,我有很多关系。每个论坛都可以有多个博客,每个博客都可以属于多个论坛。

我想为博客设置一个独特的bool属性,但这个属性会在每个论坛中有所不同。

是否可以为博客/论坛组合设置多对多的属性?即blogSeen bool变量,对于每个博客/论坛关系都是唯一的。

答案

仅使用Core Data模型中的两个实体无法实现您正在寻找的解决方案。一种解决方案是添加另一个实体,该实体映射BlogForum之间的另一个关系,以便在读取/查看项目时进行跟踪。

例如,请考虑以下事项:

enter image description here

在这个模型中,添加了Viewed实体。 Viewed实体与BlogForum有一对一的关系。 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:如何在关系表上映射具有附加属性的多对多关系?

CoreData 多对多关系

为核心数据手动创建多对多关系中的中间表

推进:没有交叉表的多对多关系

如何避免在 SQLAlchemy - python 的多对多关系表中添加重复项?

核心数据:获取特定对象的多对多关系中的所有实体?