コアデータモデルの2つのエンティティのみを使用して、探しているソリューションを実現することはできません。 1つの解決策は、アイテムが読み書きされたときに追跡するために、Blog
とForum
の間の別の関係をマッピングする追加のエンティティを追加することです。
は、例えば、次の点を考慮してください
をこのモデルでは、Viewed
エンティティが追加されました。 Viewed
エンティティは、Blog
とForum
に対して1対1の関係を持ちます。 Blog
/Forum
エンティティは、Viewed
オブジェクトと逆対多の関係を持ちます。
Blog
が閲覧/閲覧されたときには、特定のForum
については、Viewed
エンティティを作成する必要があります。 Viewed
エンティティ内のBlog
/Forum
ペアリングは一意である必要があります。これにより、各フォーラムのブログの読んだ/読んでいない状態を追跡することができます。
ここでは、その目的のために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
}
}
同様の質問に対して[この回答](https://stackoverflow.com/a/47227350/3985749)を参照してください。 – pbasdf