2011-10-11 13 views
5

Estoy haciendo una aplicación que crea horarios de cursos para las personas en mi escuela. Este es el diseño aproximado que tenía en mente para la aplicación:¿Son NSDocument y CoreData una combinación posible, o NSPersistentDocument es la única forma?

Me gustaría que mi subclase NSDocument representara el horario de una persona. La idea es que abran un documento, y puedan agregar cursos de un grupo a su horario, luego guardar, compartir, abrir, etc. Por lo tanto, el horario se almacenará en un archivo externo, elegido por el usuario.

Me gustaría utilizar CoreData para almacenar todos los cursos que los estudiantes pueden elegir. Estos no se modificarán con la creación y edición de los horarios, sino que, en su lugar, es probable solo al iniciarse la aplicación, cuando se comprueben las actualizaciones de la información del curso.

Esta parece ser la forma lógica de estructurar mi aplicación. El problema es que cuando creo una aplicación basada en NSDocument y marque la casilla use CoreData, en lugar de convertirla en una aplicación basada en NSDocument con las instalaciones de CoreData, la convierte en una aplicación basada en NSPersistentDocument.

No creo que este sea el comportamiento que quiero. ¿Hay alguna manera de usar CoreData, pero aún así tener una aplicación basada en NSDocument? ¿O es NSPersistentDocument lo que debería estar usando después de todo? ¿Estoy malinterpretando todo el negocio de NS * Document? ¿Tienes algún consejo para la estructura de mi aplicación?

¡Gracias por cualquier ayuda!

+0

Dice que quiere utilizar Core Data para almacenar todos los cursos que los alumnos pueden elegir. ¿Usará también Core Data para almacenar el horario de un alumno individual en su clase de NSDocument? Creo que es la segunda pregunta la que determina si usar NSPersistentDocument o no. – paulmelnikow

+0

@noa: No, planeo guardar el horario del estudiante en un archivo externo, elegido por el usuario. –

+0

Usando algo así como un plist o un archivador con clave, supongo que te refieres? Puede dejar que el usuario elija un archivo por separado y aún así utilizar los datos principales. Eso es lo que NSPersistentDocument te ayuda a hacer. – paulmelnikow

Respuesta

2

Sí, puede usar Core Data sin usar NSPersistentDocument. Simplemente crea una instancia de NSPersistentStoreCoordinator y NSManagedObjectContext directamente. Aquí hay un código: how do you create a NSManagedObjectContext

Si desea compartir una instancia del catálogo entre varias instancias NSDocument, y no desea conservar el catálogo junto con cada documento, esta es una buena forma de hacerlo. Su aplicación o delegado de aplicación puede encargarse de cargar el catálogo del curso, y su documento puede encargarse de cargar y guardar el horario de un alumno individual. Tendrá que implementarlo usted mismo, utilizando un archivador con clave, por ejemplo, o escribiendo un plist usted mismo.

En su lugar, si lo desea, puede aprovechar aún más los datos centrales. Represente los horarios de los estudiantes con NSManagedObject sy deje que NSPersistentDocument se encargue de cargar y guardar los contextos. Obtiene una gran cantidad de funcionalidades útiles, como deshacer-rehacer, de forma gratuita.

+0

¡Ahh, gracias por expandir! No creo haber incluido suficiente explicación en mi pregunta original. ¡Gracias! –

Cuestiones relacionadas