Core Data fetch 中的谓词返回的结果与数组上的相同谓词不同

Posted

技术标签:

【中文标题】Core Data fetch 中的谓词返回的结果与数组上的相同谓词不同【英文标题】:Predicate in a Core Data fetch doesn't return the same results as the same predicate on a array 【发布时间】:2013-09-23 10:55:17 【问题描述】:

在下面的例子中,为什么两个properties 数组没有相同的元素?第一个数组为空,第二个数组包含 1 个元素,但它们使用相同的谓词...

NSError *error;

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"publication.store.storageMode != 0 && publication.store.complete == NO && publication.download == NIL"];

NSFetchRequest *request1 = [NSFetchRequest fetchRequestWithEntityName:@"Property"];
request1.predicate = predicate;
NSArray *properties1 = [self executeFetchRequest:request1 error:&error];

NSFetchRequest *request2 = [NSFetchRequest fetchRequestWithEntityName:@"Property"];
NSArray *allProperties = [self executeFetchRequest:request2 error:&error];
NSArray *properties2 = [allProperties filteredArrayUsingPredicate:predicate];
properties1 有 0 个元素。 allProperties 有 12 个元素。 properties2 有 1 个元素。

我不明白为什么第一个请求没有返回我在第二种方法中获得的一个元素。它们不应该是等价的吗?

【问题讨论】:

去掉这一行再试试 request1.predicate = predicate; 哪一行?我已经做了request1.predicate = predicate;。第一段代码返回 0 结果。 我的意思是对于 request2 你没有提到这样 request2.predicate = predicate;仅对于您这样设置的 request1。所以我要求删除这一行 request1.predicate = predicate; 这就是重点。请求 1 在获取请求中使用谓词并且不返回结果。请求 2 不使用谓词,因此它返回一个包含所有 Property 对象的数组。如果我在数组上使用 same 谓词,我得到 1 个结果,而第一种情况为 0。这就是我要解释的。也许是因为 Core Data 使用的底层 SQLite 请求...... 你在过滤后的数组中得到的属性是否有nil发布或存储? 【参考方案1】:

这可能不是作为答案,我不知道如何在评论中写出如此长的文本。我不太确定您不能直接在 CoreData 谓词中使用 BOOL 获取。

因此,出于测试目的,我会尝试使用两个不同的谓词:

NSPredicate *predicateArray = [NSPredicate predicateWithFormat:@"publication.store.storageMode != 0 && publication.store.complete == NO && publication.download == NIL"];

NSPredicate *predicateCoreData = [NSPredicate predicateWithFormat:@"publication.store.storageMode != 0 && publication.store.complete == %@ && publication.download == NIL",[NSNumber numberWithBool:myBool]];

另外,我会将 NIL 替换为 nil。

【讨论】:

以上是关于Core Data fetch 中的谓词返回的结果与数组上的相同谓词不同的主要内容,如果未能解决你的问题,请参考以下文章

在 Core Data 可转换字符串数组上返回匹配项的 Swift 谓词

Core Data Fetch 没有返回它应该返回的对象

Core Data 多对多谓词(再次)

我需要帮助将 Core Data 的结果放入 Swift 3 中的数组中

Swiftui: MacOS App: Fetching Core Data in ContentView OK,但是如何使用 AppDelegate 的结果呢?

如何在Core Data中使用带有fetchRequest的谓词