Core Data fetch中的谓词不会返回与阵列上相同谓词相同的结果

时间:2013-09-23 10:55:18

标签: cocoa core-data nspredicate nsfetchrequest

在下面的示例中,为什么两个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个元素。

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

1 个答案:

答案 0 :(得分:0)

这可能不是作为答案,我不知道如何在评论中写suych长文本。我不太确定你不能直接在你的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。