2010-08-29 11 views
5

Dans les données de base pour l'iPhone, je recevais toutes sortes d'erreurs en essayant de sauvegarder des données dans un NSManagedObjectContext.comment créer un NSManagedObjectContext

Je crois que mes problèmes étaient tous à faire avec moi en utilisant un NSManagedObjectContext qui était utilisé dans plusieurs threads.

donc je voulais créer un nouveau NSManagedObjectContext et essayer, mais je ne peux pas trouver le code exemple pour créer simplement une nouvelle instance ...

Je sais que simple, mais je voudrais vraiment apprécier toute aide ici.

Note, je l'ai vu cet article sur les docs Apple: http://developer.apple.com/iphone/library/documentation/cocoa/conceptual/CoreDataUtilityTutorial/Articles/05_createStack.html

Mais celui-ci utilise un code que je ne suis pas au courant, comme le XMLStore qui n'est pas pris en charge sur l'iPhone, etc.

Répondre

14

c'est le code pour créer un nouveau contexte:

- (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]; 
} 

Il y a tout simplement créer une nouvelle instance du contexte et de définir le magasin que vous souhaitez utiliser.

Si vous avez plusieurs magasins, vous opteriez pour quelque chose comme ça:

- (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]; 
} 

Pour plus d'informations, s'il vous plaît jeter un oeil à Apple's Core Data Tutorial for iOS.

À la votre!

+1

Merci VFN, mais d'où vient [self persistentStoreCoordinator] '? est-ce hérité d'une super classe? Im dans une classe d'utilité avec mon code, comment devrais-je aller obtenir le persistentStoreCoordinator? – Mark

+1

Vous devez implémenter le code pour l'installation de votre magasin de persistance. Jetez un oeil à cet exemple d'Apple: http://developer.apple.com/iphone/library/samplecode/TopSongs/Introduction/Intro.html – vfn

+0

Est-il sûr d'utiliser le MOC du thread principal pour obtenir le persistentStoreCoordinator? Je doute que ce soit, mais juste demander ... – Mark