代码之家  ›  专栏  ›  技术社区  ›  deanWombourne

countForFetchRequest和executeFetchRequest返回不同数量的结果

  •  3
  • deanWombourne  · 技术社区  · 14 年前

    我发现NSFetchRequest对于count和execute返回不同的结果。

    我有一个产品实体和一个尺寸实体。一种产品有多种尺寸。

    我有两种产品,productA和productB。ProductA只提供size1,productB同时提供size1和size2。

    假设

    ANY sizes.#size IN {"size1", "size2"} '

    我发现它返回3 countForfetchRequest 但是当我执行fetch请求时有一个2个项目的数组。

    countForFetch请求 executeFetchRequest 打电话来。

    我试过设置 setReturnsDistinctResults:YES

    2 回复  |  直到 14 年前
        1
  •  1
  •   Massimo Cafaro    14 年前

    我稍微修改了答案中的谓语。请注意,对于您可能遇到的解析问题(在我前面的一条评论中给出),同样的考虑仍然适用。我假设您有多个大小,比如sizeA、sizeB、sizeC等等。您需要一个子查询来正确处理核心数据中的多对多关系,如下谓词所示

    编辑:

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(sizes.@count == 1 || sizes.@count == 2) && (1 == SUBQUERY(sizes, $sub, $sub.#size == %@ || $sub.#size == %@).@count  || 2 == SUBQUERY(sizes, $sub, $sub.#size == %@ || $sub.#size == %@).@count)", yourSizeAvariable, yourSizeBvariable];
    

    让我知道这是否适合你。

        2
  •  0
  •   drekka    14 年前

    我认为,当您进行计数时,它将计算从sql查询返回的行数。在查询size表时,返回3,因为等效的sql将返回3行。

    当你做一个取回,你得到2,因为你只会得到两个产品对象。不过,如果你看看这些产品的大小对象的数量,你会发现3。