2011-04-16 3 views
0

J'ai reçu un projet xcode4 nommé TestProject dans lequel j'essaie d'ajouter CoreData. J'ai ajouté un modèle de données (nommé TestDataModel) avec quelques entités et créé des classes NSManagedObject pour les entités.IOS CoreData - Impossible de charger NSPersistentStoreCoordinator

Mon problème est que je ne peux pas charger le magasin persistant

if(self.managedObjectContext == nil){ 
     NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); 
     NSString* basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil; 
     NSURL* storeUrl = [NSURL fileURLWithPath:[basePath stringByAppendingPathComponent: @"TestProject.sqlite"]]; 
     NSError* errors; 

     NSPersistentStoreCoordinator* persistentStoreCoordinator = 
          [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[NSManagedObjectModel 
                    mergedModelFromBundles:nil ]]; 

     if(![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
                configuration:nil 
                   URL:storeUrl 
                  options:nil 
                  error:&errors]) 
     { 
      NSLog(@"Error loading persistent store: %@", [errors localizedDescription]); 
     } 

     self.managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [self.managedObjectContext setPersistentStoreCoordinator:persistentStoreCoordinator]; 

    } 

Je l'erreur persiste:

Error loading persistant store: The operation couldn’t be completed. (Cocoa error 258.) 

S'il vous plaît remarquer je cours aussi ce dans le simulateur.

Merci d'avance.

Répondre

0

Compris. Ne savais pas que je avais besoin pour créer la base de données

Ci-dessous le code fonctionne

if(self.managedObjectContext == nil){ 

     NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"TestProject.sqlite"]; 

     NSFileManager *fileManager = [NSFileManager defaultManager]; 
     if (![fileManager fileExistsAtPath:storePath]) { 
      NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"TestProject" ofType:@"sqlite"]; 
      if (defaultStorePath) { 
       [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL]; 
      } 
     } 

     NSURL *storeUrl = [NSURL fileURLWithPath:storePath]; 


     NSError* errors; 
     NSPersistentStoreCoordinator* persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[NSManagedObjectModel mergedModelFromBundles:nil]]; 

     if(![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&errors]) 
     { 
      NSLog(@"Error loading persistent store: %@", [errors localizedDescription]); 
     } 

     self.managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [self.managedObjectContext setPersistentStoreCoordinator:persistentStoreCoordinator]; 

    } 

Vous aurez besoin de ce aswell

- (NSString *)applicationDocumentsDirectory { 
    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
} 
1

vous utilisez le mauvais répertoire.

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); 
                ^^^^^^^^^^^^^^^^^^^^^^^^ 

changement dans ce

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
                ^^^^^^^^^^^^^^^^^^^ 

Le NSDocumentDirectory est créé par iOS, mais le répertoire NSDocumentationDirectory n'est pas.