2013-01-11 1 views
0

J'ai travaillé toute la journée pour résoudre une erreur que j'ai trouvée être une erreur NSInternalInconsistencyException. Le message de la console d'erreur que j'obtiens est "Ce NSPersistentStoreCoordinator n'a pas de stockage persistant, il ne peut pas effectuer d'opération de sauvegarde." Aussi, je reçois "L'exécution a été interrompue, raison: EXC_BAD_ACCESS (code = 1, adresse = 0x1)."NSInternalInconsistencyException: Impossible d'obtenir NSPersistentStore pour démarrer ou créer un magasin

Je le code suivant dans mon délégué App:

- (void)saveContext 
{ 
    NSError *error = nil; 
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext; 
    if (managedObjectContext != nil) { 
     if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) { 

      NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
      abort(); 
     } 
    } 
} 

#pragma mark Core Data stack 

- (NSManagedObjectContext *)managedObjectContext { 

    if (_managedObjectContext != nil) { 
     return _managedObjectContext; 
    } 

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

- (NSManagedObjectModel *)managedObjectModel { 

    if (_managedObjectModel != nil) { 
     return _managedObjectModel; 
    } 
    _managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; 
    return _managedObjectModel; 
} 

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
    if (_persistentStoreCoordinator != nil) { 
     return _persistentStoreCoordinator; 
    } 

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"shindy.sqlite"]; 

    NSError *error = nil; 
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } 

    return _persistentStoreCoordinator; 
} 


#pragma mark Application's documents directory 

- (NSURL *)applicationDocumentsDirectory 
{ 
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
} 

Je throughly lire sur d'autres questions similaires à celui-ci, et il semble que mon code est cohérent, et je ne devrais pas avoir ce problème. Et pourtant, je suis ...

J'ai essayé à la fois le nettoyage & la suppression de l'application et la réinstallation. J'ai essayé l'application à la fois sur un appareil & sur le simulateur. J'ai changé le nom de l'URLPath ajoutée, "shindy.sqlite", à divers noms que je n'ai pas utilisés auparavant. J'ai également essayé d'instancier avec force [self saveContext]; dans ma méthode applicationDidFinishLaunching pour essayer de faire créer mon magasin par mon application.

Toutes mes tentatives pour résoudre le problème ont simplement renvoyé la même erreur. Je ne sais pas quoi d'autre essayer.

+0

Avez-vous essayé de nettoyer le projet en le supprimant de votre simulateur/appareil et en l'exécutant? –

+0

Avez-vous essayé de nettoyer le projet, puis de le supprimer de votre téléphone/simulateur? –

+0

Oui, je l'ai fait. J'ai oublié d'inclure que j'ai essayé ça. – jakenberg

Répondre

0

J'ai finalement compris ce que je faisais mal. Malheureusement, cela ne sera probablement pas d'une grande aide pour la plupart d'entre vous car c'était une erreur stupide que j'ai commise. Je faisais le "ajout" normal sur l'URL dans l'App Delegate. Et puis "ajout" à nouveau dans le premier contrôleur de vue qui chargerait. Cela a entraîné mon code en ajoutant un nom sur un dossier sqlite déjà créé.

Questions connexes