CDXML - Exportieren und Importieren von Managed Objects

  • CDXML - Exportieren und Importieren von Managed Objects

    Hallo.

    Ich habe ein kleines Framework geschrieben, welches es ermöglicht managed Objects einer Core Data Anwendung in eine XML Datei zu exportieren bzw. zu importieren. Da ich noch recht neu in Objective-C bin ist sicherlich noch vieles verbesserungswürdig. Einige Dinge sind mir schon selbst aufgefallen (convenient allocators schreiben, wichtige dinge gleich im vom init setzen lassen).

    Das Exportieren funktioniert wie folgt:

    Quellcode

    1. #import <CDXML/CDXML.h>
    2. ManagedObjectsExporter *exporter = [[[ManagedObjectsExporter alloc] init] autorelease];
    3. [exporter setManagedObjects:[yourArrayController arrangedObjects]];
    4. [exporter setPath:@"/Path/to/file.xml"];
    5. if([exporter exportManagedObjects] == YES)
    6. {
    7. NSLog(@"success");
    8. }
    9. else
    10. {
    11. NSLog(@"failed");
    12. }
    Alles anzeigen


    Das Importieren geht wie folgt:

    Quellcode

    1. #import <CDXML/CDXML.h>
    2. ManagedObjectsImporter *importer = [[[ManagedObjectsImporter alloc] init] autorelease];
    3. [importer setPath:@"/Path/to/file.xml"];
    4. [importer setEntityName:@"YourEntity"];
    5. if([importer importManagedObjects] == YES)
    6. {
    7. NSLog(@"Everything went fine.");
    8. }
    9. else
    10. {
    11. NSLog(@"There was an error.");
    12. }
    Alles anzeigen


    Man kann natürlich auch den Importierten objekten gleich noch eine relationship mitgeben - oder einfach noch andere eigenschaften für alle objekte ändern...

    Quellcode

    1. ManagedObjectsImporter *importer = [[[ManagedObjectsImporter alloc] init] autorelease];
    2. [importer setPath:@"/Path/to/file.xml"];
    3. [importer setEntityName:@"Person"];
    4. NSEntityDescription *cityEntity = [NSEntityDescription entityForName:@"City" inManagedObjectContext:context];
    5. NSManagedObject *newCity = [[NSManagedObject alloc] initWithEntity: cityEntity insertIntoManagedObjectContext:context];
    6. [newCity setValue:@"New City" forKey:@"name"];
    7. NSMutableDictionary *relationships = [NSMutableDictionary dictionary];
    8. [relationships setObject:newCity forKey:@"city"];
    9. [importer setProperties:relationships];
    10. if([importer importManagedObjects] == YES)
    11. {
    12. NSLog(@"Everything went fine.");
    13. }
    14. else
    15. {
    16. NSLog(@"There was an error.");
    17. }
    Alles anzeigen


    Hier wird eine neue Stadt erzeugt und die importierten personen ihr gleich zugewiesen...

    Framework (Source) downloaden
    Dokumentation zum Exportieren
    Dokumentation zum Importieren

    Mich würde vorallem interessieren, ob sowas sinnig ist und wie es euch gefällt.
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • Dir ist klar, das CoreData auch XML unterstützt wenn man zu Fuß geht:

    Quellcode

    1. - (NSManagedObjectContext *) managedObjectContext {
    2. NSError *error;
    3. NSString *applicationSupportFolder = nil;
    4. NSURL *url;
    5. NSFileManager *fileManager;
    6. NSPersistentStoreCoordinator *coordinator;
    7. if (managedObjectContext) {
    8. return managedObjectContext;
    9. }
    10. fileManager = [NSFileManager defaultManager];
    11. applicationSupportFolder = [self applicationSupportFolder];
    12. if ( ![fileManager fileExistsAtPath:applicationSupportFolder isDirectory:NULL] ) {
    13. [fileManager createDirectoryAtPath:applicationSupportFolder attributes:nil];
    14. }
    15. url = [NSURL fileURLWithPath: [applicationSupportFolder stringByAppendingPathComponent: @"CoreData.xml"]];
    16. coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
    17. if ([coordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:nil error:&error]){
    18. managedObjectContext = [[NSManagedObjectContext alloc] init];
    19. [managedObjectContext setPersistentStoreCoordinator: coordinator];
    20. } else {
    21. [[NSApplication sharedApplication] presentError:error];
    22. }
    23. [coordinator release];
    24. return managedObjectContext;
    25. }
    Alles anzeigen
    also

    Quellcode

    1. [coordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:nil error:&error]
    und CoreData speichert als XML Datei.

    Womit ich dich natürlich nicht vom Üben abhalten möchte ;)

    Gruß Manfred
    Seminare, Artikel, Code. ObjectiveCeeds - alles für die Apfelzucht.