【问题标题】:Core Data: Fetching related objects in many-to-many relationship核心数据:以多对多关系获取相关对象
【发布时间】:2018-11-19 08:25:24
【问题描述】:

我正试图围绕这种情况的正确架构/模式来思考:

我有两个实体,BookLibrarys。它们彼此之间存在多对多关系(Books 可以在多个 Librarys 中,Library 将有多个 Books。

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

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

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

【问题讨论】:

标签: ios core-data nsmanagedobject nsfetchrequest


【解决方案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!)

【讨论】:

  • 我不知道CONTAINS 可以与这样的集合一起使用! Apple's docs 说它是一个字符串比较运算符,但这种用法完全有意义。谢谢!
  • @JohnWickham 我添加了另一种方法。不客气。 :)
猜你喜欢
  • 1970-01-01
  • 2014-07-10
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多