2010-04-30 2 views
8

J'ai un projet de données de base qui a des livres et des auteurs. Dans le modèle de données, Authors a une relation to-many avec Books and Books qui a une relation 1-1 avec les auteurs. J'essaye de tirer tous les livres qui n'ont pas d'auteur. Peu importe comment je l'essaie, aucun résultat n'est retourné. Dans mon prédicat, j'ai aussi essayé = NIL, == nul, == NIL. Toute suggestion serait appréciée.iPhone SDK Core Data: Récupère toutes les entités avec une relation nulle?

// fetch all books without authors 
- (NSMutableArray *)fetchOrphanedBooks { 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Book" inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:entity]; 
[fetchRequest setFetchBatchSize:20]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"author == nil"]; 
[fetchRequest setPredicate:predicate]; 

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 

NSString *sectionKey = @"name";//nil; 
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext 
                            sectionNameKeyPath:sectionKey cacheName:nil]; 
BOOL success = [aFetchedResultsController performFetch:nil]; 
NSMutableArray *orphans = nil; 

// this is always 0 
NSLog(@"Orphans found: %i", aFetchedResultsController.fetchedObjects.count); 

if (aFetchedResultsController.fetchedObjects.count > 0) 
{ 
    orphans = [[NSMutableArray alloc] init]; 
    for (Book *book in aFetchedResultsController.fetchedObjects) 
    { 
     if (book.author == nil) 
     { 
     [orphans addObject:book]; 
     } 
    } 

} 

[aFetchedResultsController release]; 
[fetchRequest release]; 
[sortDescriptor release]; 
[sortDescriptors release]; 

return [orphans autorelease]; 

} 
+0

Je modifié le code pour mettre le prédicat sous sa forme appropriée pour que personne ne d'autre faire la même erreur que je l'ai fait. – TechZen

+0

La relation livre -> auteur est-elle requise? – TechZen

Répondre

24

Essayez d'utiliser un compte de zéro à la place:

NSPrdicate *predicate = [NSPredicate predicateWithFormat:@"author == nil || [email protected] =0"]; 
1

Essayez:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"author == nil"]; 

Le "==" est l'égal logique. Juste "=" est une cession.

Je fais cette erreur tout le temps.

Edit:

D'accord, je manqué en quelque sorte dans l'OP qu'il a dit qu'il avait déjà essayé. Pardon.

+5

Ces symboles fonctionnent de la même manière =, == L'expression de gauche est égale à l'expression de la main droite. http://developer.apple.com/library/ios/#Documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html – Danil

Questions connexes