У меня есть объекты, хранящиеся в моем CoreData, которые выглядят примерно так:CoreData fetchRequest с предикатом неправильно скачет NULL значения
idnametype 1 cat aaa 2 dog bbb 3 ape NULL
Я забирающий эти объекты, основанные на свойстве «типа», как это:
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), в результате чего в следующем:
idnametype 2 bar bbb
Вместо того, что я бы ожидать:
idnametype 2 dog bbb 3 ape NULL
Та же проблема возникает, когда я использую предиката формат: NOT (type IN {"aaa", "bbb"})
. Каким образом я буду нуждаться в этом. Этот предикат не приводит к извлечению записей.
Я не понимаю, почему это может произойти, потому что, если я не укажу предикат, все объекты получаются правильно. Объекты с NULL типов действительно получают неправдоподобные правильно, если бы я изменить предикат к:
[NSPredicate predicateWithFormat:@"type = null"];
Пожалуйста, обратите внимание; все вышеперечисленное просто иллюстрирует, к чему сводится проблема. Мой фактический код более сложный и просто использует предикатный формат: type != "aaa" OR type = null
- это то, что я хотел бы избежать, если это возможно.
Любая помощь очень ценится!
Действительно, спасибо за это. Поэтому я думаю, что нет никакого способа добавить нулевой тест в предикат. – Tonnie