2010-08-29 31 views
5

In Core-Daten für das iPhone, ich bekam alle Arten von Fehlern beim Versuch, Daten zu einem NSManagedObjectContext zu speichern.Wie erstelle ich einen NSManagedObjectContext

Ich glaube, dass meine Probleme alle mit mir zu tun mit einer NSManagedObjectContext, die in mehreren Threads verwendet wurde.

Also wollte ich eine neues NSManagedObjectContext und versuchen, das schaffen, aber ich kann den Beispielcode nicht finden, einfach eine neue Instanz erstellen ...

ich seine einfaches weiß, aber ich würde wirklich jede Hilfe hier zu schätzen wissen.

Hinweis, habe ich diesen Artikel auf der Apple-Dokumentation gesehen: http://developer.apple.com/iphone/library/documentation/cocoa/conceptual/CoreDataUtilityTutorial/Articles/05_createStack.html

Aber dieser verwendet einig Code, den ich nicht kenne, wie die XMLStore, die nicht auf dem iPhone unterstützt wird, usw.

Antwort

14

dies ist der Code einen neuen Kontext zu erstellen:

- (NSManagedObjectContext *)managedObjectContext { 
    NSManagedObjectContext *managedObjectContext = nil; 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) { 
     managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [managedObjectContext setPersistentStoreCoordinator:coordinator]; 
     [managedObjectContext setUndoManager:nil]; 
    } 
    return [managedObjectContext autorelease]; 
} 

Es ist einfach eine neue Instanz der Kontext erstellen und den Speicher gesetzt, die Sie verwenden möchten.

Wenn Sie mehrere Geschäfte haben, würden Sie für so etwas gehen:

- (NSManagedObjectContext *)managedObjectContextForStore:(NSString *)store { 
    NSManagedObjectContext *managedObjectContext = nil; 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinatorForStore:store]; 
    if (coordinator != nil) { 
     managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [managedObjectContext setPersistentStoreCoordinator:coordinator]; 
     [managedObjectContext setUndoManager:nil]; 
    } 
    return [managedObjectContext autorelease]; 
} 

Für mehr Informationen, bitte einen Blick auf Apple's Core Data Tutorial for iOS haben.

Prost!

+1

Danke VFN, obwohl wo '[persistantStoreCoordinator]' herkommt? Ist das von einer Superklasse geerbt? Ich bin in einer Utility-Klasse mit meinem Code, wie soll ich den persistentStoreCoordinator bekommen? – Mark

+1

Sie müssen den Code für die Einrichtung Ihres Persistenzspeichers implementieren. Werfen Sie einen Blick auf dieses Beispiel von Apple: http://developer.apple.com/iphone/library/samplecode/TopSongs/Introduction/Intro.html – vfn

+0

Ist es sicher, den MOC aus dem Haupt-Thread zu verwenden, um den persistentStoreCoordinator zu bekommen? Ich bezweifle, dass es ist, aber nur fragen ... – Mark