【问题标题】:How to write a Core Data predicate to filter to specific sub-entity types?如何编写 Core Data 谓词来过滤特定的子实体类型?
【发布时间】:2009-11-21 18:14:01
【问题描述】:

我有一个名为 FObject 的超实体,它有几个子实体,比如 Foo1、Foo2 和 Foo3。我有许多 tableviews 应该显示有关子实体的不同集合的信息,例如,一个只显示 Foo2s 和 Foo3s 而另一个显示所有这些。

如果我在 FObject 上获取,我如何编写谓词来过滤子实体类型?

我尝试了“entity.name IN %@”并提供了实体名称列表,但没有成功。

或者我应该只过滤返回的结果?

或者我应该添加一个对类型进行编码的属性并使用“type IN %@”吗?

【问题讨论】:

  • 我注意到CAST 是谓词格式字符串的保留字。这可能会提供您想要的功能。但是,如何使用它没有记录,所以我不会使用它。

标签: cocoa core-data nspredicate


【解决方案1】:

如果您有不同的表视图来显示各种子实体的实例,那么您大概有每个表的 NSArrayControllers,对吗?如果是这样,为什么不将数组控制器的实体名称设置为所需的子实体名称?

这是获取请求中使用的名称(您可以在其中指定要获取的实体名称)。 fetch 请求中使用的谓词用于按属性或关系进行过滤,而不是实体名称。

【讨论】:

  • 这将给我每张表一个实体。我想要每个表中的特定实体组合:不是一个,不是全部。
  • 啊,我明白了。由于每个提取请求都必须针对特定的实体名称,因此您将无法在提取期间对其进行过滤。如果它们必须是单独的实体,我会在内存中过滤它们。或者,您可以将事物展平一点,并且简单地 not 具有不同的实体(使用“type”属性来允许在获取期间进行过滤)。我认为这比拥有单独的实体名称添加类型属性要好得多。
  • 我选择了添加属性解决方案。它工作得很好。但是我需要保留我的实体层次结构,因为实体类型之间有许多共同的属性和关系以及许多差异。我正在镜像一个向我发送数据的现有面向对象系统。
猜你喜欢
  • 2011-09-04
  • 2015-02-25
  • 2014-10-26
  • 1970-01-01
  • 2012-04-16
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
相关资源
最近更新 更多