2017-12-21 18 views
0

블로그 및 포럼의 coreData 모델에 많은 관계가 있습니다. 각 포럼은 여러 개의 블로그를 가질 수 있으며 각 블로그는 여러 개의 포럼에 속할 수 있습니다.coreData many to many relation 관계 테이블에 추가 속성 추가

본 블로그에 대해 고유 한 bool 속성을 설정하고 싶습니다.이 속성은 각 포럼마다 다를 수 있습니다.

블로그/포럼 조합에 설정할 수있는 여러 관계로 속성을 포함 할 수 있습니까? 즉 모든 블로그/포럼 관계에 대해 고유 한 blogSeen bool 변수입니다.

+1

비슷한 질문에 [답변] (https://stackoverflow.com/a/47227350/3985749)을 참조하십시오. – pbasdf

답변

0

핵심 데이터 모델에서 두 엔티티 만 사용하여 찾고있는 솔루션을 얻을 수 없습니다. 한 가지 해결책은 항목을 읽거나 볼 때 추적하기 위해 BlogForum 사이의 다른 관계를 매핑하는 추가 엔터티를 추가하는 것입니다.

는 예를 들어, 다음 사항을 고려하십시오

enter image description here

를이 모델에서 Viewed 기업이 추가되었습니다. Viewed 엔티티는 BlogForum과의 to-one 관계를가집니다. 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 
    } 
}