我发现NSFetchRequest正在为计数和执行返回不同的结果。
我有一个Product实体和一个Size实体。产品有很多尺寸。
我有两个产品,productA和productB。 ProductA仅适用于size1,productB适用于size1和size2。
鉴于NSPredicate
'ANY sizes.#size IN {"size1", "size2"}
'
我发现它为countForfetchRequest
返回3,但在执行获取请求时返回2个数组的数组。
计数是不正确的值。 ProductB有两种尺寸,似乎在countForfetchRequest
中被计算两次,但显然只能通过executeFetchRequest
调用返回一次。
我尝试设置setReturnsDistinctResults:YES
没有效果。
答案 0 :(得分:1)
我在答案中略微修改了谓词。请注意,关于您可能遇到的解析问题(在我之前的评论中给出)的相同注意事项仍然适用。我假设您有多个大小,比如sizeA,sizeB,sizeC等。您需要一个子查询来正确处理Core Data中的多对多关系,如下面的谓词所示
编辑:
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];
请告诉我这是否适合您。
答案 1 :(得分:0)
我认为当你进行计数时,它会计算从sql查询返回的行数。当您查询大小表时,您将返回3,因为等效的sql将返回3行。
当你进行提取时,你得到2,因为你只会得到两个产品对象。但是,如果你在这些产品中查看大小对象的数量,你会发现3。
哦,并且select distinct不起作用,因为你有3组独特的值: - )