核心数据:以多对多关系获取相关对象

时间:2018-06-09 13:31:25

标签: ios core-data nsmanagedobject nsfetchrequest

我试图围绕适当的架构/模式来解决这种情况:

我有两个实体BookLibrary。它们各自与其他人有多对多的关系(Book s可以在多个Library中,Library将有许多Book s。

我的一个观点列出了特定图书馆中的图书。我有一个控制器类来处理这些数据的提取并将其提供给我的视图。为此,我计划对所有NSFetchRequest实体使用Book,并按谓词进行过滤,该谓词仅提取特定Library中的图书。但我似乎无法找到格式化此获取请求的谓词的正确方法。

我还调查过只是访问Library的{​​{1}}访问者,无需获取任何内容即可访问相应的图书(如here所述),但我想使用books以便我的控制器收到有关已获取对象的任何更改的通知,并可以通知视图。我考虑过只是在监听NSFetchedResultsControllerDelegate,但这会为上下文中的每一个变化发送通知,即使它不适用于相关实体。

过去你是如何处理这种情况的?

1 个答案:

答案 0 :(得分:1)

您的获取请求/谓词可能如下所示:

let fetchRequest: NSFetchRequest<Book> = Book.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "%K CONTAINS %@", #keyPath(Book.libraries), library)

// Another option:
fetchRequest.predicate = NSPredicate(format: "SELF IN %@", library.books!)