2016-05-27 11 views
0

Ich habe Objekte in meinem Coredata gespeichert, die wie folgt aussehen:Coredata fetchRequest mit Prädikat überspringt falsch NULL-Werte

 
idnametype 
1 cat aaa 
2 dog bbb 
3 ape NULL 

ich diese Objekte auf der Eigenschaft „type“ wie folgt basierend Holen bin:

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]; 

Also, ich versuche nur alle Objekte zu holen, wo der Typ nicht wie "aaa" ist.

Die Abrufanforderung weglässt unerwartet nicht nur die Gegenstände, die mit „aaa“ Typen wie im Prädikat angegeben, sondern auch die Objekte, bei denen der Typ nicht gesetzt ist (null), was zu dem folgenden:

 
idnametype 
2 bar bbb 

statt dessen, was ich erwarten würde:

 
idnametype 
2 dog bbb 
3 ape NULL 

Das gleiche Problem tritt auf, wenn ich Prädikat Format verwenden: NOT (type IN {"aaa", "bbb"}). Welches ist die Art, wie ich das brauche? Dieses Prädikat führt dazu, dass keine Datensätze abgerufen werden.

Ich verstehe nicht, warum dies passieren könnte, denn wenn ich kein Prädikat angeben, werden alle Objekte richtig abgerufen. Objekte mit NULL-Typ erhielten geholt richtig, wenn ich das Prädikat ändern würde:

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

Bitte beachten Sie; alles oben illustriert nur, worauf das Problem hinausläuft. Mein tatsächlicher Code ist komplizierter und verwendet einfach das Prädikat Format: type != "aaa" OR type = null ist etwas, das ich gerne vermeiden würde, wenn möglich.

Jede Hilfe sehr geschätzt!

Antwort