2017-12-21 11 views
0

私は、ブログやフォーラムのために私のcoreDataモデルに多対多の関係を持っています。各フォーラムは複数のブログを持ち、各ブログは複数のフォーラムに属しています。coreData多対多リレーションテーブルに追加プロパティを追加する

ブログには一意のboolプロパティを設定したいと考えていますが、このプロパティはフォーラムごとに異なります。

ブログ/フォーラムの組み合わせに設定できる多対多の関係でプロパティを設定することはできますか?すなわち、すべてのブログ/フォーラムの関係に固有のblogSeen bool変数。

+1

同様の質問に対して[この回答](https://stackoverflow.com/a/47227350/3985749)を参照してください。 – pbasdf

答えて

0

コアデータモデルの2つのエンティティのみを使用して、探しているソリューションを実現することはできません。 1つの解決策は、アイテムが読み書きされたときに追跡するために、BlogForumの間の別の関係をマッピングする追加のエンティティを追加することです。

は、例えば、次の点を考慮してください

enter image description here

をこのモデルでは、Viewedエンティティが追加されました。 Viewedエンティティは、BlogForumに対して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 
    } 
} 
関連する問題