2011-07-19 36 views
19

mi NSManagedObjectModel no devuelve nada aunque la ruta sea correcta.NSManagedObjectModel initWithContentsOfURL no devuelve nada aunque el modeloURL es válido

 NSString *modelKey = [NSString stringWithFormat:@"/%@/Model", name]; 
    NSString *modelPath = [((Configuration *)[Configuration shared]) stringEntry:modelKey]; 
    NSURL *modelURL = nil; 
    if (! [modelPath contains:@"://"]) { 
     modelPath = PathForBundleResource(modelPath); 
     modelURL = [NSURL fileURLWithPath:modelPath]; 
    } 
    NSManagedObjectModel *m = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 

NSString * PathForBundleResource (NSString * relativePath)

NSString* resourcePath = [[NSBundle mainBundle] resourcePath]; 
return [resourcePath stringByAppendingPathComponent:relativePath]; 

Hemos restablecido el simulador, hizo una generación limpia pero nada ayudó.

Soy nuevo en la programación de iPhone (datos básicos en particular).

Agradecería cualquier ayuda.

Editar: He editado la publicación original relacionada con el archivo xcdatamodeld. Al principio no estaba conectado correctamente, pero ahora lo está y sigue teniendo el mismo problema.

Editar 2: Aparentemente, el nombre del modelo xcdata tenía algunas variaciones en el nombre del modelo xcdata después de la vinculación. Está funcionando ahora. Sintiéndose tan estúpido. No sé cómo eliminar esta pregunta.

+0

Puede agregar una respuesta a su propia pregunta y aceptarla si pudiera solucionar su problema, ya que otras personas podrían tener el mismo problema. – Besi

Respuesta

58

Tuve el mismo problema después de renombrar el archivo .xcdatamodeld. El problema se resolvió cerrando y volviendo a abrir el cliente de Xcode.

+0

Esto parece hacer el truco. Gracias por el consejo. –

+2

Renombrar el archivo .xcdatamodeld, es un error raro. Gracias por la ayuda de reinicio. – JLust

+0

La solución no funciona para mí. Tengo exactamente el mismo problema. ¿Alguien mas? – Philip007

4

Acabo de encontrar este problema después de cambiar el caso del nombre del archivo .xcdatamodeld (por ejemplo, refactorizado "mydatastore.xcdatamodeld" a "MyDatastore.xcdatamodeld") en un sistema de archivos insensible a mayúsculas y minúsculas.

La solución incluye tanto de las respuestas anteriores:

  1. Refactor el archivo de modelo de datos a un nombre claramente diferente, por ejemplo, "MyDatastoreTemporary.xcdatamodeld"

  2. producto> Limpio

  3. Cerrar XCode. Vuelva a abrir XCode y el proyecto.

  4. Refacturar el archivo del modelo de datos a su nombre final, p. "MyDatastore.xcdatamodeld"

  5. producto> Limpio

  6. Cerrar XCode. Vuelva a abrir XCode y el proyecto.

+0

Tuve este problema cuando Xcode insertó un guión bajo en el nombre del modelo, mientras que el nombre del producto contenía un espacio en esa posición. Intenté cambiar el nombre y terminé aquí .. – Bjinse

1

He intentado tanto de las respuestas anteriores, sin embargo lo que lo fijó para mí estaba quitando y volver a agregar el archivo .xcdatamodeld desde/hasta el proyecto de Xcode. No se necesitó limpieza. Por alguna razón, volver a agregarlo parece solucionar el problema.

0

La forma más segura, si aún no ha versionado su modelo, es hacer lo siguiente.

  1. No cambie el nombre de su archivo xcdatamodeld.
  2. En su lugar, cree un nuevo archivo de modelo de datos con el nuevo nombre.
  3. Mantenga el archivo vacío y salga de Xcode
  4. Abra un terminal y cd (cambie el directorio) en su antiguo directorio xcdatamodeld.
  5. Dentro de este directorio debe haber un directorio que termine en xcdatamodel. Cambiar a este directorio
  6. Dentro del directorio xcdatamodel, encontrará un archivo llamado contents. Copie este archivo en la misma ubicación en su directorio llamado recientemente .xcdatamodeld/?. xcdatamodel.
  7. Abra Xcode y modifique su código de Datos centrales para acceder a este nuevo modelo.
  8. Construir y probar.
  9. Elimina el viejo xcdatamodeld de tu proyecto.

Esto funciona con modelos básicos que no tienen versiones.

0

Resolví que el problema se movió para destruir el modelo .xcdatamodeld y luego lo agregué una vez más.

+0

¿Puedes por favor? explique el detalle de cómo eliminó y agregó el .xcdatamodeld nuevamente; para mí, el .xcdatamodeld no se muestra para eliminar y agregar nuevamente. – skkrish

0

Cuando ejecuté el proyecto la primera vez, especifiqué la extensión como xcdatamodeld. Pero eso falló, ya que debería ser momd. Pero pasé un nil en lugar de momd suponiendo que la extensión no será obligatoria. Pero con nil, el initWithContentsOfURL falló y cuando finalmente ingresé momd, funcionó bien.

Cuestiones relacionadas