Ich habe eine Event-Datenbank in Core Data geladen, die doppelte Event-Titel enthält. Dies wurde gemacht, damit die Datenbank einzigartige Informationen für jeden Tag der Veranstaltung bereitstellen kann. ZB Preisschwankungen an jedem Datum.Sortieren von Core-Daten mit Prädikat zum Eliminieren von Duplikaten
Ich muss jetzt die doppelten Ereignistitel aus einer Liste entfernen, die als Tabellenansicht mit NSFetchRequest und NSPredate angezeigt werden, um den Filter bereitzustellen. Aber alle Beispiele, die ich gesehen habe, erfordern einen nicht dynamischen Schlüsselwert, der als Ziel für den Prädikatfilter verwendet werden kann. zB unter NSDate stellt die Zeit jetzt als Schlüsselfilter zur Verfügung und es funktioniert.
Momentan zielt NSString * title auf einen Wert in der ManagedObject-Klasse der Ereignisse, der einen Nullwert zurückgibt. Hier ist ein Ausschnitt aus dem 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;
}
Das gleiche Problem hier. –