具有谓词的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是我想尽可能避免的。

任何帮助非常感谢!