2012-09-27 21 views
6

Recibo un error 'Cannot create an NSPersistentStoreCoordinator with a nil model' después de eliminar la aplicación del dispositivo. Estoy probando una aplicación de iPhone en un dispositivo iPad. He puesto este código para comprobar si tengo el archivo en AppDelegate.m:No se puede crear un NSPersistentStoreCoordinator con un modelo nulo después de eliminar la aplicación del dispositivo

- (NSManagedObjectModel *)managedObjectModel { 
    if (__managedObjectModel != nil) { 
     return __managedObjectModel; 
    } 
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Name" withExtension:@"momd"]; 
    if ([[NSFileManager defaultManager] fileExistsAtPath:[modelURL path]]) { 
     NSLog(@"%@", [modelURL path]); //This is printed because file exists 
    } 
    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 
    return __managedObjectModel; 
} 

El problema es que [NSManagedObjectModel initWithContentsOfURL] está volviendo valor nulo. que he hecho las siguientes cosas, sin éxito:

    instanciación
  1. Cambio managedObjectModel con esta carpeta de compilación limpiado __managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
  2. y el proyecto ha limpiado
  3. Restarted Xcode
  4. equipo se reinició
  5. cambiado "momd "to" mom "
  6. .xcdatamodeld está en Copia Recursos de paquete y fuentes de compilación
  7. renombró .xcdatamodeld y limpios y cerrados proyecto de Xcode varias veces
  8. apaga y se enciende el dispositivo
  9. carpetas eliminados de: $ cd /Users/john/Library/Developer/Xcode/DerivedData
  10. nombre sqlite cambiado para forzar la generación de bases de datos
  11. eliminado la aplicación (de nuevo) de Devine

He estado buscando la solución durante horas y todavía no puedo encontrarla.

+0

¿Funciona en el simulador? ¿Puedes abrir el archivo '.xcdatamodeld' en Xcode? – FluffulousChimp

+0

Alan, soy capaz de abrir el archivo '.xcdatamodeld' en Xcode, pero la aplicación no funciona en el simulador. Se inicia, pero solo muestra una pantalla negra. – amb

+0

Creo que he encontrado algo ... Me acabo de dar cuenta de que no había borrado todos los archivos que viven en '/ Users/john/Library/Developer/Xcode/DerivedData', así que cuando hice esto, el simulador fue OK , incluso el managedObjectModel. ¿Hay alguna manera de eliminar estos archivos en el dispositivo? – amb

Respuesta

15

Finalmente, después de dos días tratando de resolver este problema, he encontrado la solución aquí:

How to create the magic .xcdatamodeld folder/package?

ahora estoy terminando un proyecto que se inició otro desarrollador, y parece que él no Impulsé los últimos cambios al repositorio, pero esos cambios se produjeron en la aplicación del dispositivo y, cuando eliminé la aplicación, eliminé el archivo correcto .xcdatamodeld. El problema era que tenía solo un archivo MyApp.xcdatamodel en el proyecto, y esta era la razón por la que tenía una carpeta vacía momd, al parecer.

Con el fin de crear la jerarquía derecha del modelo de datos, la solución fue muy fácil:

  1. Seleccione la MyApp.xcdatamodel
  2. Ir a Editor> añadir la versión de modelo ...

Y esto incrustó el archivo MyApp.xcdatamodel en MyApp.xcdatamodeld. Ahora la carpeta momd tiene los archivos mom y la aplicación se ejecuta correctamente. El único problema ahora es que tengo dos MyApp.xcdatamodel, uno con un ícono verde seleccionado, pero ambos con el mismo contenido, así que no hay problema.

1
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"select xcdatamodeld" withExtension:@"momd"]; 

seleccione URL exacta de nombre de recurso ..

0

Es relativamente simple.

si tiene un archivo xcdatamodel sin versiones: utilizar la extensión "madre" en su declaración managedObjectModel. Si su xcdatamodel tiene versiones, debe usar "momd".

2

Respaldado para construir mi primera aplicación de iOS nuevamente. Hoy recibí este error: 'No se puede crear un NSPersistentStoreCoordinator con un modelo nulo'. En realidad, eso es fácil de arreglar. Por favor haga esta línea de código:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"[name]" withExtension:@"momd"]; 

El [nombre] rellenó es el mismo que el archivo de modelo (.xcdatamodeld). Por ejemplo Tengo una TipRecord.xcdatamodeld continuación, esta línea debería ser:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"TipRecord" withExtension:@"momd"]; 
Cuestiones relacionadas