Core Data
Überblick
- Core Data ist ein Framework für die Verwaltung und Persistierung von Objektgraphen.
- Gesteuert von einer grafisch editierbaren, relationalen Schemadefinition.
- Persistierung erfolgt in SQLite, Binary-Archiven oder In-Memory.
- Unterstützung für bidirektionale 1:n und n:m Beziehungen zwischen Objekten.
- Unterstützung für Undo und Redo-Operationen.
- Schema-Versionierung.
Xcode Schemaeditor
Hinzufügen von Frameworks (Abhängigkeiten zu Bibliotheken)
Framework-Header importieren
-
Verwendung über Import-Direktive in den jeweiligen Quelldateien oder in der
pre-compiled Header-Datei (.pch) des Projektes, z.B.#import <CoreData/CoreData.h>
Core Data Klassen
Initialisierung von Core Data I
Initialisierung von Core Data II
- Best Practice: Über Properties im
AppDelegatedie Core Data-Infrastruktur beim ersten Zugriff initialisieren. managedObjectModel: Standardmäßig werden durch Aufruf vonmergedModelFromBundlesalle Schemata (.xcdatamodel) aus dem Main-Bundle geladen.persistentStoreCoordinator:PersistentStoreCoordinatorwird erzeugt und ein SQLite-PersistentStore mit Ablage im Dokumentenverzeichnis der Anwendung angelegt.managedObjectContext: wird erzeugt und mit persistentStoreCoordinator verbunden.
Anlegen von Objekten
-
Neue Objekte werden typischerweise über
NSEntityDescriptionerzeugt:SomeObject *obj = (SomeObject *)[NSEntityDescription insertNewObjectForEntityForName:@"SomeObject" inManagedObjectContext:someManagedObjectContext];
-
Dies ist eine Abkürzung für:
NSEntityDescription *entity = [[someManagedObjectModel entitiesByName] objectForKey:@"SomeObject"]; SomeObject *item = (SomeObject *) [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:someManagedObjectContext];
Persistieren von Objekten
-
Persistierung geschieht durch Aufruf von
saveauf demmanagedObjectContext, z.B. imAppDelegatebeim Beenden der Anwendung:- (void)applicationWillTerminate:(UIApplication *)application { NSError *error; if (managedObjectContext != nil) { if ([managedObjectContext hasChanges]) { [managedObjectContext save:&error]; if (error) { // Handle error NSLog(@"Error %@, %@", error, [error userInfo]); exit(-1); } } } }
Abfragen von Objekten: NSFetchRequest
-
Abfrage von Objekten erfolgt durch das Ausführen eines
NSFetchRequest:NSFetchRequest *request = [[NSFetchRequest alloc] init]; [request setEntity:[NSEntityDescription entityForName:@"SomeObject" inManagedObjectContext:ctx]]; NSError *error = nil; NSArray *results = [ctx executeFetchRequest:request error:&error]; if (error != nil) { NSLog(@"Error %@, %@", error, [error userInfo]); // Handle error } [request release];
Abfragen von Objekten: Sortierreihenfolge
-
Mit
setSortDescriptorskann für einenNSFetchRequestdie Sortierreihenfolge des Abfrageergebnisses spezifiert werden:// Sortierung analog SQL "ORDER BY age ASC, name ASC" NSSortDescriptor* sortByAge = [[[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES] autorelease]; NSSortDescriptor* sortByName = [[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES] autorelease]; [fetchRequest setSortDescriptors: [NSArray arrayWithObjects:sortByAge, sortByName, nil]];
Weiterführende Informationen
- Developing with Core Data: http://developer.apple.com/macosx/coredata.html
- Core Data Tutorial for iPhone OS: PDF
- Core Data Programming Guide: PDF

