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

Core Data: Fetching related objects in many-to-many relationship

对于这种情况,我正在努力思考正确的 architecture/pattern:

我有两个实体,BookLibrary。它们彼此之间存在多对多关系(Book 可以在许多 Library 中,而一个 Library 将有许多 Book

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

我还调查了简单地访问 Librarybooks 访问器以访问适当的书籍而无需获取任何内容(如 here 所述),但我想使用NSFetchedResultsControllerDelegate 所以我的控制器会收到有关获取对象的任何更改的通知,并且可以通知视图。我考虑过只监听 NSManagedObjectContextDidChangeObjectsNotification,但这会为上下文中的每一个变化发送通知,即使它不是针对相关实体。

您过去是如何处理此类情况的?

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

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!)