2016-05-27 3 views
0

У меня есть объекты, хранящиеся в моем 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 - это то, что я хотел бы избежать, если это возможно.

Любая помощь очень ценится!

ответ

Смежные вопросы