Aunque Core Data es un descendiente del Enterprise Object Framework de Apple , un mapeador de objetos relacionales (ORM) que estaba / está estrechamente vinculado a un back-end relacional, Core Data no es un ORM. Es, de hecho, un marco de gestión de gráficos de objetos. Gestiona un gráfico de instancias de objetos potencialmente muy grande, lo que permite que una aplicación funcione con un gráfico que no encajaría por completo en la memoria introduciendo objetos dentro y fuera de la memoria según sea necesario. Core Data también gestiona las restricciones en las propiedades y las relaciones y mantiene la integridad de referencia (por ejemplo, mantener los enlaces hacia adelante y hacia atrás consistentes cuando se agregan / eliminan objetos a / desde una relación). Core Data es, por lo tanto, un marco ideal para construir el componente "modelo" de una arquitectura MVC.
Para llevar a cabo su gestión gráfica, datos básicos sucede a utilizar SQLite como una tienda de discos. Se podría haber llevado a cabo utilizando una base de datos relacional diferente o incluso una base de datos no relacionales, tales como CouchDB . Como otros han señalado, Core Data también puede usar XML o un formato binario o un formato atómico escrito por el usuario como back-end (aunque estas opciones requieren que todo el gráfico del objeto encaje en la memoria). Si está interesado en cómo se implementa Core Data en un backend de SQLite, puede consultar el marco OmniDataObjects de OmniGroup , una implementación de código abierto de un subconjunto de la API de Core Data. El marco BaseTen también es una implementación de la API de Core Data usando PostgreSQL como back-end.
Debido a que Core Data no pretende ser un ORM para SQLite, no puede leer esquemas arbitrarios de SQLite. Por el contrario, no debe confiar en poder leer los almacenes de datos SQLite de Core Data con otras herramientas SQLite; El esquema es un detalle de implementación que puede cambiar.
Por lo tanto, no hay realmente ningún conflicto entre usar Core Data o SQLite directamente. Si desea una base de datos relacional, use SQLite (directamente o mediante uno de los contenedores Objective-C como FMDB ), o un servidor de base de datos relacional. Sin embargo, es posible que desee aprender Core Data para usar como marco de administración de gráficos de objetos. En combinación con las clases de controlador de Apple y los widgets de vista compatibles de enlace de valor clave, puede implementar una arquitectura MVC completa con muy poco código.