Embora o Core Data descenda do Enterprise Object Framework da Apple , um mapeador objeto-relacional (ORM) que foi / está fortemente vinculado a um back-end relacional, o Core Data não é um ORM. Na verdade, é uma estrutura de gerenciamento de gráfico de objetos. Ele gerencia um gráfico potencialmente muito grande de instâncias de objetos, permitindo que um aplicativo trabalhe com um gráfico que não caberia inteiramente na memória, colocando objetos dentro e fora da memória conforme necessário. O Core Data também gerencia restrições de propriedades e relacionamentos e mantém a integridade da referência (por exemplo, mantendo os links avançados e reversos consistentes quando objetos são adicionados / removidos para / de um relacionamento). Portanto, o Core Data é uma estrutura ideal para a construção do componente "modelo" de uma arquitetura MVC.
Para implementar a sua gestão gráfico, Core Data acontece de usar SQLite como uma loja de disco. Ele poderia ter sido implementado usando um banco de dados relacional diferente ou até mesmo um banco de dados não-relacional como o CouchDB . Como outros já apontaram, o Core Data também pode usar XML ou um formato binário ou um formato atômico escrito pelo usuário como back-end (embora essas opções exijam que todo o gráfico do objeto caiba na memória). Se você estiver interessado em como o Core Data é implementado em um back-end do SQLite, consulte a estrutura OmniDataObjects do OmniGroup , uma implementação de código aberto de um subconjunto da API de dados do Core. A estrutura BaseTen também é uma implementação da API de dados principais usando o PostgreSQL como back-end.
Como o Core Data não se destina a ser um ORM para SQLite, ele não pode ler o esquema SQLite arbitrário. Por outro lado, você não deve poder ler os armazenamentos de dados SQLite do Core Data com outras ferramentas SQLite; o esquema é um detalhe de implementação que pode mudar.
Portanto, não há realmente nenhum conflito entre usar o Core Data ou o SQLite diretamente. Se você deseja um banco de dados relacional, use SQLite (diretamente ou por meio de um dos wrappers Objective-C, como FMDB ), ou um servidor de banco de dados relacional. No entanto, você ainda pode querer aprender os Dados Principais para uso como uma estrutura de gerenciamento de gráficos de objetos. Em combinação com as classes de controlador da Apple e os widgets de exibição compatíveis com vinculação de valor-chave, você pode implementar uma arquitetura MVC completa com muito pouco código.