具有谓词的CoreData fetchRequest不正确地跳过NULL值
我有存储在我的CoreData中的对象看起来像这样:
ID 名称 types 1只猫aaa 2狗bbb 3猿NULL
我基于这样的“types”属性获取这些对象:
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];
所以,我只是试图获取所有types不是“aaa”的对象。
取出请求不仅意外地省略了谓词中指定的具有“aaa”types的对象,而且还忽略了未设置types的对象(null),结果如下:
ID 名称 types 2巴bbb
而不是我所期望的:
ID 名称 types 2狗bbb 3猿NULL
当我使用谓词格式时会发生同样的问题: NOT (type IN {"aaa", "bbb"})
。 这是我将需要这种实际的方式。 这个谓词导致没有logging被抓取。
我不明白为什么会发生这种情况,因为如果我没有指定一个谓词,所有的对象都会被正确地取回。 如果我将谓词改为:
[NSPredicate predicateWithFormat:@"type = null"];
请注意 ; 以上全部只是说明了问题归结为什么。 我的实际代码更复杂,只是使用谓词格式: type != "aaa" OR type = null
是我想尽可能避免的。
任何帮助非常感谢!