2009-11-21 4 views
0

J'ai un magasin de données d'événements, mais je veux seulement montrer les événements qui se produisent dans le futur.iPhone Core Data - limiter les résultats renvoyés à des événements futurs

J'ai un champ indiquant la date de l'événement de type NSDate.

Comment filtrer les événements ayant une date NSDate * dans le passé?

Merci

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Events" inManagedObjectContext:managedObjectContext]; 
    [request setEntity:entity]; 


NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"eventDate" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[request setSortDescriptors:sortDescriptors]; 
[sortDescriptors release]; 
[sortDescriptor release]; 



NSError *error; 
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy]; 

if (mutableFetchResults == nil) { 
     // Handle the error. 
} 

Répondre

3

Vous voulez ajouter un prédicat chercher, une instance de NSPredicate. Vous êtes autorisé à utiliser les comparaisons standards < et > dans le prédicat lors de sa création, de sorte que vous pouvez simplement faire:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"date > %@", 
                  [NSDate date]]; 
[request setPredicate:predicate];

Ensuite, exécutez votre demande normale. Le prédicat filtrera tous les résultats qui ne répondent pas aux critères date > [NSDate date], c'est-à-dire des dates plus anciennes que maintenant. (. Cela suppose que votre champ de date pour vos objets de base de données est appelée date, ajuster en conséquence si elle est quelque chose d'autre)

Pour plus d'informations sur les prédicats, vous pouvez voir:

Questions connexes