2009-12-15 5 views
6

He estado mirando la documentación en Core Data y tratando de encontrar la manera de organizar la Pila de Datos Core para que esté accesible para todos mis UITableViewControllers. Todos los ejemplos proporcionados por Apple muestran que esto debe implementarse en AppDelegate; sin embargo, la documentación no recomienda este enfoque porque está demasiado surcado. Ver link.Confundido en obtener el ManagedObjectContext de AppDelegate

(¿Por qué esto no se menciona en la documentación del SDK del iPhone es otro misterio)

Mi problema es que me he repetido el patrón de diseño como en el ejemplo de datos básicos se muestra en TopSongs para recuperar una Entidad de ManagedObjectContext se produce una vista de tabla secundaria y se produce el siguiente error ... no se pudo ubicar un modelo de objeto NSManaged para el nombre de entidad 'canción'. Extrañamente, esto se puede encontrar en la vista de tabla padre, así que supongo que se debe a que la pila de datos básicos en AppDelegate ha sido dealoc.

¿Alguien conoce un buen ejemplo que sigue un patrón de diseño diferente a los creados en Recipies, CoreData Books and Locations? Todos estos siguen el mismo patrón.

Todo lo que quiero hacer es recuperar los datos originales y la clasificación es con un criterio diferente en la tabla de vistas chid.

Respuesta

4

Existe una discusión significativa acerca de dónde la gente está a favor de colocar la pila de Datos centrales en this question. Tiendo a colocar la pila dentro de un singleton (como indico allí). Esto le brinda acceso conveniente a la pila donde lo necesite dentro de su aplicación.

En cuanto a su problema, considero que es muy poco probable que los elementos de su pila de datos centrales hayan sido desasignados. Por un lado, estarías colgando al enviar un mensaje a tu contexto o modelo, en lugar de volver al informe que tienes ahora. Si puede acceder a la entidad "Canción" desde otro lugar de su aplicación, mi apuesta es que no está transfiriendo correctamente el modelo de contexto a la instancia que lo necesita.

+1

Brad También me gusta el enfoque singleton. Ya tiendo a usar un singleton para el manejo del estado de la aplicación en la mayoría de mis aplicaciones. Los ejemplos de Apple no lo hacen parecer tan simple como puede ser. – paulthenerd

+0

Poner los datos básicos en un singleton es exactamente lo que mi intuición me ha estado diciendo. Los ejemplos de Apple de ponerlo en el delegado de la aplicación parecen demasiado complicados de manejar desde cualquier otro que no sea el primer controlador de vista. Gracias. Estoy seguro de que la reestructuración del proyecto resolverá esto. – Jim

+0

Acabo de hacer una implementación siguiendo las pautas de diseño de Apple, pero no me parece bien. La próxima vez también elegiré un enfoque singleton. – mvexel

0

El problema que tienes aquí es porque no has declarado una entidad llamada canciones en tu modelo de objeto ... El patrón que estás siguiendo no tiene nada que ver con eso ... Te sugiero que leas datos básicos y el modelo de objeto here. Espero que eso te ayude

1

IIRC los ejemplos de Apple inicializan la pila de Datos centrales en el Delegado de la aplicación pero configuran propiedades en el controlador de vista para hacer referencia al ManagedObjectContext y establecerlos en la carga de la aplicación, a lo que Apple hace referencia cuando leo es que debe hacer algo similar en lugar de intentar cargar el ManagedObjectContext directamente desde el delegado de la aplicación.

Si publica un código será mucho más fácil ayudarlo a descubrir qué está pasando con su error. Lo primero que comprobaría es que la referencia a ManagedObjectContext en su controlador no es nula.

+0

Gracias esto tiene sentido. Supongo que puede llamar a un nuevo ManagedObjectContext de nuevo un viewController posterior – Jim