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

问题描述 投票:0回答:1

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

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

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

ios core-data many-to-many
1个回答
0
投票

仅使用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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.