Ein bis Viele Beziehungen iPhone - NSPredicate-core-Daten-Abfrage
Ich habe eine Reihe von Kalendern, die jeweils eine Reihe von Veranstaltungen. Ich möchte, um herauszufinden, alle Ereignisse für einen Kalender, wo das Datum > x.
Meiner Signatur der Methode sieht wie folgt aus
-(NSArray*)eventsForCalender:(Calendar*)calender StartDate:(NSDate*)start endDate:(NSDate*)endDate;
Ich fügte hinzu, ein Ereignis zu einem Kalender, wie diese, aber ich habe keine Ahnung, wie man über die Konstruktion eines NSPredicate für die Abfrage. Jede Hilfe zu schätzen
-(Event*)newEventforCalender:(Calendar*)calender
{
Event * newEvent = (Event*)[NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:app.managedObjectContext];
NSMutableSet * eventsArray = [calender mutableSetValueForKey:@"Events"];
[eventsArray addObject:newEvent];
[app.managedObjectContext processPendingChanges];
return newEvent;
}
alt-text http://img4.imageshack.us/img4/5218/screenshot20091120at140.png
Änderte ich die Beziehung Namen, "Veranstaltungen" und habe versucht, die folgenden
....
NSEntityDescription * entity = [NSEntityDescription entityForName:@"Calendar" inManagedObjectContext:app.managedObjectContext];
[request setEntity:entity];
NSPredicate * predictate = nil;
predictate = [NSPredicate predicateWithFormat:@"(name == %@) AND (Event.start > '%@') AND (Event.finish < '%@')", calender.name, start, endDate, nil];
[request setPredicate:predictate];
...
Aber ich bin immer eine Ausnahme
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ valueForUndefinedKey:]: diese Klasse ist nicht die key-value-coding-konform für die Schlüssel-Ereignis.'
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einige Gedanken:
newRelationship
wirklich genanntcalendar
?Events
zuevents
zu Folgen Namenskonventionen (Entitäten wieEvent
undCalendar
kapitalisiert werden, während Attribute wiediscipline
und Beziehungen wieevents
sind Kleinbuchstaben)calendar
undevents
Beziehungen in beide RichtungenDass gesagt und getan, könnten Sie ein Prädikat wie:
Dies funktioniert, wenn der Kalendername ist ausreichend für eine eindeutige Identifizierung eines einzelnen Kalenders ein. Wenn Sie zwei Kalender mit dem gleichen Namen, müssten Sie eine zusätzliche Suche nach Kriterium, wie
@"(category like '%@') ... ", calendar.category, ...
Können Sie auch mithilfe des Objekt-ID:
Eine gute Referenz für
NSPredicate
Programmierung ist Apple ' s treffend benanntNSPredicate Programming Guide
.