In meinem Kerndatenmodell habe ich eine Entität mit einem Datumsattribut, und wie der Titel vermuten lässt, möchte ich diese Entität nach (Woche) Tagen gruppieren.Gruppieren nach Wochentagen mit Kerndaten
Das Problem ist, die Daten werden mehr oder weniger als Zeitstempel gespeichert und ich weiß nicht, wie man ein Prädikat erstellt, das in der Lage ist, meine Entitäten angemessen zu gruppieren/filtern.
Ich habe herausgefunden, dass ich wahrscheinlich für jeden Tag holen müssen, so erstellt folgende Methode. Der Code, mit dem ich Hilfe brauche, ist genau in der Mitte.
- (NSFetchedResultsController *)fetchedResultsController:(NSDate *)day {
if(fetchedResultsController != nil)
return fetchedResultsController;
// Create and Configure Request
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
// Predicate
// pseudo code where i'm clueless is marked by "<" and ">" - start
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"DateAttribute BETWEEN <first second of day> AND <last second of day>"];
// or
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"<dayofmonth-month-year of DateAttribute> LIKE <dayofmonth-month-year of day>"];
[request setPredicate:predicate];
// pseudo code where i'm clueless is marked by "<" and ">" - end
// Sort descriptors
NSSortDescriptor *titleDescriptor = [[NSSortDescriptor alloc] initWithKey:sortDescriptorName ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:titleDescriptor];
[request setSortDescriptors:sortDescriptors];
// create and init fetchResultsController
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
self.fetchedResultsController = aFetchedResultsController;
fetchedResultsController.delegate = self;
//Memory
[request release];
[titleDescriptor release];
[aFetchedResultsController release];
return fetchedResultsController;
}
Ich würde wirklich jede Hilfe dankbar. Danke
danke für Ihre umfassende Antwort! "Wenn Sie nach Tag gruppieren möchten, übergeben Sie DateAttribute als Argument sectionNameKeyPath, wenn Sie NSFetchedResultsController initialisieren. Auch hier müssen Sie kein Prädikat angeben: Sie erhalten automatisch Abschnitte für die Tage." wäre es toll, wenn das funktioniert hätte, aber wenn es so gemacht wird, gruppiert es sich nach dem Wert des DateAttribute (das die Zeit einschließt, z.B. "2009-07-02 20:51:27 - 0400") p.s.: Mein ultimatives Ziel ist es, eine Liste von Wochentagen zu erhalten, und wenn man auf einen von ihnen klickt, öffnen sich alle Entitäten, die mit diesem Tag verbunden sind, in einer anderen Tabellenansicht. – gabtub
Sie können dies erreichen, indem Sie in Ihrer Entity das DateAttribute ohne die Zeit mit derselben Technik speichern, die ich in meinem Beispielcode gezeigt habe: Ausgehend von einem NSDate-Objekt (Ihrem DateAttribute) entpacken Sie zunächst seine Datumskomponenten und erstellen dann ein anderes NSDate-Objekt diese Komponenten (daher enthält es nicht die Zeit). Es ist dieses letzte NSDate-Objekt, das Sie in Ihrer Entität speichern. Dann funktioniert das Abrufen der Objekte auf der Grundlage ihres Tages wie erläutert. –
Zuerst wollte ich das Datenmodell nicht ändern, da es von jemand anderem spezifiziert wurde, aber zum Glück stellte sich heraus, dass wir nicht Zeit und Datum speichern mussten, sondern nur Datum, also benutzte ich Teile Ihres Beispielcodes = > funktioniert vielen Dank! – gabtub