核心数据:以多对多关系获取相关对象
Core Data: Fetching related objects in many-to-many relationship
对于这种情况,我正在努力思考正确的 architecture/pattern:
我有两个实体,Book
和 Library
。它们彼此之间存在多对多关系(Book
可以在许多 Library
中,而一个 Library
将有许多 Book
。
我的一个观点列出了特定图书馆中的书籍。我有一个控制器 class 来处理此数据的获取并将其提供给我的视图。为此,我计划对所有 Book
实体使用 NSFetchRequest
,并通过仅获取特定 Library
中的书籍的谓词进行过滤。但是我似乎找不到为这个获取请求格式化谓词的正确方法。
我还调查了简单地访问 Library
的 books
访问器以访问适当的书籍而无需获取任何内容(如 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!)
对于这种情况,我正在努力思考正确的 architecture/pattern:
我有两个实体,Book
和 Library
。它们彼此之间存在多对多关系(Book
可以在许多 Library
中,而一个 Library
将有许多 Book
。
我的一个观点列出了特定图书馆中的书籍。我有一个控制器 class 来处理此数据的获取并将其提供给我的视图。为此,我计划对所有 Book
实体使用 NSFetchRequest
,并通过仅获取特定 Library
中的书籍的谓词进行过滤。但是我似乎找不到为这个获取请求格式化谓词的正确方法。
我还调查了简单地访问 Library
的 books
访问器以访问适当的书籍而无需获取任何内容(如 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!)