2014-09-27 6 views
10

ho ottenuto questo errore ogni volta che installo l'applicazione su Simulator utilizzando Xcode 6CoreData: errore: -addPersistentStoreWithType: configurazione di SQLite: (null)

2014-09-27 11:25:01.286 MyFace[2992:1780149] CoreData: error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///Users/douglasferreira/Library/Developer/CoreSimulator/Devices/DAC1BEDE-8673-471C-ADFD-923654C78719/data/Containers/Data/Application/D2213EE4-3807-44FF-9FD0-E7C6C1BD18A2/Library/MyFace.sqlite options:{ 
NSInferMappingModelAutomaticallyOption = 1; 
NSMigratePersistentStoresAutomaticallyOption = 1; 
} ... returned error Error Domain=NSCocoaErrorDomain Code=512 "The operation couldn’t be completed. (Cocoa error 512.)" UserInfo=0x7fe566317030 {reason=File appeared during sanity check; this seems suspicious} with userInfo dictionary { 
reason = "File appeared during sanity check; this seems suspicious"; 
} 

[2014-09-27 11:25:01:288] [ERROR] Problems to initialize persistent store coordinator: Error Domain=NSCocoaErrorDomain Code=512 "The operation couldn’t be completed. (Cocoa error 512.)" UserInfo=0x7fe566317030 {reason=File appeared during sanity check; this seems suspicious}, The operation couldn’t be completed. (Cocoa error 512.) 

Questo è come creo NSManagedObjectModel e NSPersistentStoreCoordinator

- (NSManagedObjectModel *)managedObjectModel 
{ 
    if (!_managedObjectModel) 
    { 
     // It is created from the application's model with the following name and extension 
     NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MyFace" withExtension:@"momd"]; 
     _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 
    } 
    return _managedObjectModel; 
} 

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
    if (!_persistentStoreCoordinator) 
    { 
     // generic variable to hold any error occurred during context creation 
     NSError *error = nil; 

     NSDictionary *persistentOptions = @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES}; 

     // Create the coordinator with the previous parameters 
     NSURL *storeURL = [[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject]; 
     storeURL = [storeURL URLByAppendingPathComponent:@"MyFace.sqlite"]; 

     // try to initialize persistent store coordinator with options defined below 
     self.persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel]; 
     [self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
                 configuration:nil 
                   URL:storeURL 
                  options:persistentOptions 
                   error:&error]; 

     if (error) 
     { 
      NSLog(@"[ERROR] Problems to initialize persistent store coordinator: %@, %@", error, [error localizedDescription]); 
     } 
    } 
    return _persistentStoreCoordinator; 
} 

Ho provato tutti i tipi di bandiere .. ma non so come superarlo.

Grazie!

+0

Mi chiedo se è un problema di percorso. Hai la stessa cosa se usi 'NSDocumentDirectory' invece di' NSLibraryDirectory'? –

+0

Ho un errore diverso .. Penso che sia peggio. 'Errore dominio = NSCocoaErrorDomain Code = 512" Impossibile completare l'operazione. (Errore Cocoa 512.) "UserInfo = 0x7fbec9c36e70 {reason = Impossibile creare il file; code = 2}, l'operazione non può essere completata. (Errore di cacao 512.) ' –

risposta

11

Ho trovato la soluzione al mio problema. Ho avuto due thread che accedono allo NSPersistentStoreCoordinator mentre non è stato ancora creato. Così ho aggiunto un @synchronize su init pigro e ho accodato le richieste.

0

Douglas ha ragione. Per i noobies iOS come me, la dicitura sarebbe la seguente:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
    @synchronized(self) { 

     if (!_persistentStoreCoordinator) 
     { 
      // generic variable to hold any error occurred during context creation 
      NSError *error = nil; 

      NSDictionary *persistentOptions = @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES}; 

      // Create the coordinator with the previous parameters 
      NSURL *storeURL = [[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject]; 
      storeURL = [storeURL URLByAppendingPathComponent:@"MyFace.sqlite"]; 

      // try to initialize persistent store coordinator with options defined below 
      self.persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel]; 
      [self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
                  configuration:nil 
                    URL:storeURL 
                   options:persistentOptions 
                    error:&error]; 

      if (error) 
      { 
       NSLog(@"[ERROR] Problems to initialize persistent store coordinator: %@, %@", error, [error localizedDescription]); 
      } 
     } 

    } 
    return _persistentStoreCoordinator; 
}