J'ai une base de données d'événements chargée dans les données de base qui a des titres d'événements en double. Cela a été fait pour que la base de données puisse fournir des informations uniques pour chaque jour de l'événement. Par exemple, les fluctuations des prix à chaque date.Tri des données de base avec prédicat pour éliminer les doublons
Je dois maintenant supprimer les titres d'événements en double d'une liste qui sera affichée en vue de table avec NSFetchRequest et NSPredicate pour fournir le filtre. Mais tous les exemples que j'ai vus nécessitent une valeur de clé dynamique nulle pour être utilisée comme cible pour le filtre de prédicat. par exemple, NSDate ci-dessous fournit le temps maintenant comme un filtre de clé et cela fonctionne.
Actuellement, le titre NSString * cible une valeur dans la classe ManagedObject d'événements qui renvoie une valeur nulle. Voici un extrait du FetchResultsController.
- (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController == nil) {
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
NSPredicate *predicate = [[[NSPredicate alloc] init] autorelease];
[fetchRequest setReturnsObjectsAsFaults:NO];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext]];
NSArray *sortDescriptors = nil;
NSString *sectionNameKeyPath = nil;
NSDate *date = [NSDate date];
NSString *title = [events title];
if ([fetchSectioningControl selectedSegmentIndex] == 1) {
predicate = [NSPredicate predicateWithFormat:@"(closeDate >= %@) AND (title == %@)", date, title ];
sortDescriptors = [NSArray arrayWithObjects:[[[NSSortDescriptor alloc] initWithKey:@"category.name" ascending:YES] autorelease], [[[NSSortDescriptor alloc] initWithKey:@"openDate" ascending:YES] autorelease], nil];
sectionNameKeyPath = @"category.name";
} else if ([fetchSectioningControl selectedSegmentIndex] == 0){
predicate = [NSPredicate predicateWithFormat:@"closeDate >= %@", date];
sortDescriptors = [NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"openDate" ascending:YES selector:@selector(compare:)] autorelease]];
sectionNameKeyPath = @"day";
}
[fetchRequest setPredicate:predicate];
[fetchRequest setSortDescriptors:sortDescriptors];
fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:sectionNameKeyPath cacheName:@"EventsCache"];
}
return fetchedResultsController;
}
Même problème ici. –