【问题标题】:NSFetchedResultsController fetchRequest for one-many relationshipNSFetchedResultsController fetchRequest 用于一对多关系
【发布时间】:2018-08-05 06:03:25
【问题描述】:

非常感谢您在使用 NSFetchResultsController 时提供的帮助。 我认为我需要做的事情对某些人来说应该很简单,但我有点卡住了!

我将尝试解释我在做什么,或者是它的简化版本。 我有 2 个 viewController,每个都显示一个 NSTableView。我正在使用带有实体俱乐部的核心数据。其中一个 viewController 显示了一个俱乐部列表。所以对于这个,我创建了一个NSFetchResultsController,传递给它一个fetchRequest,它基本上是NSFetchRequest<Clubs>(entityName: “Clubs”)

每个俱乐部都有一个成员列表,具有一对多的关系)。我想使用第二个 viewController 显示成员。因此,当我在第一个表中点击一个俱乐部时,我希望第二个表显示其成员。

我有一个NSFetchResultsController 连接到第二个表。我被困在要发送给它的 fetchRequest 上。如果我使用与第一个类似的表,即NSFetchRequest<Members>(entityName: “Members”),正如预期的那样,我最终会得到一个显示所有存储的俱乐部的表,第二个显示存储的所有成员的表,而我只希望选择俱乐部中的成员在第一个表中。我希望这是有道理的。所以我的问题是,我应该将什么fetchRequest 发送到第二张桌子NSFetchResultsController

【问题讨论】:

  • Apperently 你知道 谓词 可以分配给核心数据获取请求。你能想到一个谓词将第二个视图控制器中的成员限制为与第一个视图控制器中的俱乐部相关的成员吗?
  • 我对谓词知之甚少,但不足以知道在这种情况下使用哪个。
  • 嗨@MartinR - 这就是我要问的 - 我应该使用哪个谓词??
  • @guinnessman 反向关系的名称是什么 - 从 MemberClub
  • 俱乐部有一种称为成员的关系——一对多的关系。从会员到俱乐部,就是关系俱乐部。

标签: swift macos core-data nsfetchedresultscontroller nsfetchrequest


【解决方案1】:

您应该将以下谓词添加到 FRC 底层的提取请求中:

fetchRequest.predicate = NSPredicate(format:"club == %@", theClubSelectedInTheFirstViewController)

【讨论】:

  • 好的 - 我会试试的。在该示例中,ClubSelectedInTheFirstViewController 是俱乐部实体(不是字符串)吗?
  • 是的,确切地说:俱乐部实体本身,而不是字符串。
  • 说得通——谢谢。我试过了,不幸的是它没有用(我仍然得到所有成员,而不是只为选定的俱乐部),但我一定在某个地方犯了错误。明天我将对此进行全面调查。现在只想感谢您的帮助。
  • 我想我现在可以正常工作了。也许这很明显?但是在我检测到俱乐部被选中的地方,并且我根据你的指令更改谓词的地方,我还必须进行新的提取:do { try fetchedResultsController.performFetch() } catch let error as NSError { print ("获取错误:(error) (error.userInfo)") }
  • 是的 - 我假设您在初始化 FRC 之前就设置了谓词。但如果没有,那么您将需要在更新谓词后重做performFetch
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多