Pregunta

Estoy intentando añadir datos básicos de una aplicación existente, que no está considerando fácil que toda la documentación y cada tutorial comienza con la creación de una aplicación que utiliza los datos esenciales, desde el principio. Así que estoy tratando de convertir una clase de modelo existente a ser una entidad de datos central. Esto es lo que hice:

  1. Añadir el marco de datos básicos.
  2. Añadir un archivo xcdatamodel. Me mostró un cuadro de diálogo donde podría añadir una clase existente, por lo que añadió mi modelo. Entonces me pellizqué los atributos y lo hicieron saber cuáles eran los tipos.
  3. En lugar de generar una nueva clase de modelo (ya que ya tengo uno) que creó un proyecto de prueba para ver lo que se vería así, y se ajusta para que coincida con mi clase. Esto incluyó cambiándolo a heredar de NSManagedObject, cambiando a mis propiedades dinámicas, la eliminación de las llamadas de liberación, etc.
  4. objetos añadidos los datos básicos a mi aplicación delegado, tras este ejemplo.
  5. En mi ViewController, donde solía alloc mi modelo, que lo cambió a

    MyModel *model = (MyModel*)[NSEntityDescription insertNewObjectForEntityForName:@"MyModel"] inManagedObjectContext:[delegate managedObjectContext];
    

Nota que el delegado es una referencia a mi aplicación delegado, declaró anteriormente. Tal vez esa no es la forma inteligente de hacerlo.

Después de ajustar todas las propiedades, que tengo:

    [[delegate managedObjectContext] save:&error];

Esta línea se bloquea, y una traza inversa dice que es [NSSqlLiteConnection execute] en el interior, cerca de 8 niveles dentro de la función de ahorro. La excepción es:

*-[NSConcreteValue UTF8String]: unrecognized selector sent to instance*

¿Qué es este valor concreto? Y por qué es este ser llamado, por quién? Si importa, mi modelo Crear / Guardar código está dentro de una función que es una devolución de llamada para un NSNotification. Es que en un hilo separado? He oído que el managedObjectContext no es seguro para subprocesos. Pero ahora no recibo el mismo error que se puede esperar en ese caso.

¿Fue útil?

Solución

Bien, estoy bastante seguro de que usted tiene una propiedad declarada como NSString del modelo de base de datos (.xcdatamodel) que se declara como algo más (un NSNumber tal vez) en su modelo de objetos. Al compilar el código, no se generan advertencias pero cuando CoreData trata de salvar la moc (es decir: la escritura de datos en el almacén persistente, conocido como su base de datos SQLite)., Se produce un error cuando CoreData intenta convertir su supuesta NSString a la codificación UTF8

Se debe a revisar su propiedades tanto en el modelo de modelo de base de datos y el objeto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top