solucion sea que puede este esta con compatible certificado cable auriculares accesorio iphone objective-c ipad core-data ios

esta - puede que este accesorio no sea compatible iphone 7



No se puede encontrar el archivo momd: problemas de datos básicos (5)

¡Oh cielos! ¡He jodido algo!

Soy un noob Core Data, trabajando en mi primera aplicación de iOS. Después de mucho desbordamiento de pila estoy usando este código:

NSString *path = [[NSBundle mainBundle] pathForResource:@"CoreData" ofType:@"momd"]; if (!path) { path = [[NSBundle mainBundle] pathForResource:@"CoreData" ofType:@"mom"]; } NSAssert(path != nil, @"Unable to find Resource in main bundle");

CoreData es el nombre de mi aplicación.

Intenté ingresar los datos iniciales en la aplicación encontrando la ruta al archivo sqlite en mi simulador de iPhone y luego insertándolos en ese archivo sqlite. Pero en algún momento, moví el sqlite (pensando que crearía una copia nueva), eliminé la aplicación del simulador y el archivo de sqlite desapareció. No estoy seguro de si estoy dejando de lado parte del proceso (esto fue hace unas horas), pero el resultado final es que todo está equivocado.

¿Cómo resubstanciar este archivo sqlite / momd? "Limpiar" y "Limpiar todos los objetivos" están atenuados.

Estoy feliz de publicar el código relevante de mi aplicación que ayudaría a arrojar algo de luz sobre este problema, pero hay toneladas de código relacionado con Core Data que no entiendo, ¡así que no estoy seguro de qué parte publicar! Cualquier ayuda es muy apreciada.


Aquí hay algunas recomendaciones:

  • El código que publicó para obtener el .mom(d) no es exactamente la forma recomendada. Use mergedModelFromBundles en mergedModelFromBundles lugar, como en

    self.managedObjectContent= [NSManagedObjectModel mergedModelFromBundles:nil];

    Se encarga de encontrar el camino, elegir / fusionar a la mom o la mom correctas e inicializar el MOC todo en un solo paso. Deberías usar esto. Pero tenga en cuenta que necesita limpiar el proceso de construcción de vez en cuando, como se explica en esta pregunta / respuesta SO .

  • Esto muestra que, aunque el rastreo a través de a menudo es bueno, no es el mejor enfoque cuando se trata de un marco grande como CoreData.

    Sinceramente, tómate un día y lee la documentación desde el principio hasta el final. Es posible que desee buscar bits de código en Google y comenzar a codificar de inmediato, pero leer la documentación definitivamente ahorra tiempo de desarrollo considerablemente a largo plazo.

    Además, el libro CoreData de Marcus Zarra (ver here ) me ayudó mucho. Puede parecer caro, pero valió la pena.

  • En un tema diferente, no creo que sea una buena estrategia colocar el archivo sqlite precocinado en el directorio del simulador (dentro de ~/Library/Application Support/iPhone Simulator/ ) incluso para fines de desarrollo ... porque no lo hace t trabajar en el dispositivo real. Si necesita hacerlo, coloque el archivo sqlite como un recurso de la aplicación, y cópielo en el momento de inicio en Documents o Caches , y utilícelo después.


Me pareció muy valioso mirar mi ejecutable en la "imagen de disco" del simulador.

Si accede a ~ / Library / Application Support / iPhone Simulator // Aplicaciones, puede ver las aplicaciones en el teléfono. Averigua cuál es el tuyo (usa buscar o mira la fecha) y luego busca en tu target.app y busca el archivo .momd.

En mi caso, el nombre de mi madre era diferente del nombre de archivo .xcdatamodeld, por lo que los datos principales no podían cargarlo. Una vez que corregí el nombre en el AppDelegate, las cosas empezaron a funcionar correctamente.

Tenga en cuenta que el "archivo" de momd parece ser realmente un directorio (como la configuración .app).

-

En términos de agregar el código para inicializar los datos centrales; Yo también hice esto. Creé un nuevo proyecto en blanco con los datos básicos habilitados, y copié todos los pasos de inicialización para los datos principales en el archivo AppDelegate. Hay un montón de cosas relacionadas con la inicialización de toda la pila, así que si eso no está presente, debes ponerlo allí.


Respuesta práctica: puede probar el siguiente código si tiene problemas con la ruta. También querrá verificar que su archivo xcdatamodel esté incluido como un recurso para su objetivo.

[[NSBundle bundleForClass:[self class]] pathForResource:@"CoreData" ofType:@"momd"]

Mejor respuesta: hay una distinción entre un archivo momd, que representa su NSManagedObjectModel, y un archivo sqlite, que es utilizado por su objeto NSPersistentStore. El mejor enfoque para trabajar con CoreData es permitir que el SDK maneje toda la interacción con sqlite. Lo único que debería tener que configurar con respecto a sqlite es decirle a su NSPersistantStore dónde esconder su archivo sqlite. Los objetos administrados que defina en su modelo de objetos administrados manejarán toda la inserción de datos y las actualizaciones por usted.

Si no está familiarizado con los objetos a los que he hecho referencia, consulte los documentos de Apple para obtener una descripción general muy útil. Definitivamente, querrá tomarse el tiempo para captar la pila CoreData completa, ya que la inversión de tiempo se traducirá en muchos menos dolores de cabeza si trabaja con Core Data de la manera que Apple espera. Es un diseño más abstracto al que están acostumbrados muchos desarrolladores web, pero tratar de eludir esa abstracción trabajando directamente con SQLite crea su propio conjunto de complejidad.

http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdBasics.html#//apple_ref/doc/uid/TP40001650-TP1


Si agregó una versión a su modelo, cambie .mom a .momd

NSString *path = [[NSBundle mainBundle] pathForResource:@"CoreData" ofType:@"momd"]; if (!path) { path = [[NSBundle mainBundle] pathForResource:@"CoreData" ofType:@"momd"];


Si los elementos del menú de objetivos limpios están en gris, es posible que la aplicación se esté ejecutando.

La forma en que está obteniendo el camino hacia la mamá / momd parece que ha intentado integrar CoreData después del hecho (en lugar de optar por incluirlo cuando creó el proyecto). Tuve los mismos problemas que probablemente tengas. El código predeterminado que busca a momd asume que existe, y usted también debería poder hacerlo si agrega una versión de su modelo de datos al proyecto.

Para hacerlo, seleccione el archivo xcdatamodel y, en el menú Diseño, seleccione Modelo de datos> Agregar versión del modelo. Luego, tendrá CoreData.xcdatamodeld con un subárbol que contiene Coredata.xcdatamodel y una nueva versión. Solo puede eliminar la versión adicional y tendrá la jerarquía que necesita. Si creas y miras en el paquete de la aplicación, verás el directorio CoreData.momd con la mamá dentro.

Esos pasos no están incluidos en ninguno de los tutoriales CoreData que he encontrado hasta ahora. Espero que sea de ayuda!