【问题标题】:CoreData fetchRequest with predicate incorrectly skips NULL values带有谓词的 CoreData fetchRequest 错误地跳过 NULL 值
【发布时间】:2016-05-27 02:50:28
【问题描述】:

我的 CoreData 中存储了如下所示的对象:

id 名称 类型 1 猫 aaa 2狗bbb 3猿空

我正在根据“类型”属性获取这些对象,如下所示:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:self.entityName];

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"type != %@", @"aaa"];
fetchRequest.fetchBatchSize = 100;
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"type" ascending:YES]];

NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"section" cacheName:nil];
fetchedResultsController.delegate = self;

NSError *error = nil;
[fetchedResultsController performFetch:&error];

所以,我只是试图获取类型不是“aaa”的所有对象。

获取请求意外地不仅省略了谓词中指定的具有“aaa”类型的对象,而且还省略了未设置类型(null)的对象,导致以下结果:

id 名称 类型 2巴BBB

而不是我所期望的:

id 名称 类型 2狗bbb 3猿空

当我使用谓词格式时会发生同样的问题:NOT (type IN {"aaa", "bbb"})。这是我需要这个的实际方式。此谓词导致未获取任何记录。

我不明白为什么会发生这种情况,因为如果我不指定谓词,所有对象都会被正确获取。如果我将谓词更改为:

[NSPredicate predicateWithFormat:@"type = null"];

请注意;以上所有只是说明问题归结为。我的实际代码更复杂,只需使用谓词格式:type != "aaa" OR type = null 是我想尽可能避免的事情。

非常感谢任何帮助!

【问题讨论】:

    标签: ios xcode core-data ios9.2


    【解决方案1】:

    【讨论】:

    • 确实,谢谢。所以我想毕竟在谓词中添加空测试是没有办法的。
    猜你喜欢
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    相关资源
    最近更新 更多