Usando Core Data com JSON local
Aprenda nesses pequenos passos a usar Core Data.
JSON
Em resumo, pode-se dizer que JSON (JavaScript Object Notation) é um vetor de objetos na qual são identificados como chave:valor, cada chave pode possuir um valor ou até menos mais de um! Se você quer saber mais sobre isso clique aqui.
No exemplo acima, cada objeto é separado por {} e logo após uma vírgula, dentro das chaves, temos a primeira chave que seria o nome e na sua frente o seu valor, que seria português. Toda chave:valor são separados por vírgula também.
CoreData
Agora vamos falar sobre Core Data, de acordo com a Apple, é um framework que você usa para gerenciar os objetos da camada de modelo em seu aplicativo. Ele fornece soluções generalizadas e automatizadas para tarefas comuns associadas ao ciclo de vida de objetos e ao gerenciamento de gráficos de objetos, incluindo persistência. Ele não é exatamente um banco de dados, mas pode agir como um, fazendo operações simples como a inserção e deleção de dados, além de se realizar buscas. Caso queira saber mais no site, entre aqui.
Vamos iniciar nosso projeto: crie seu aplicativo e marque a opção Use Core Data.
Após isso, você verá os arquivos desta forma:
NomeDoProjeto.xcdatamodeld é o arquivo que iremos mexer de início, no meu caso ele se chama CoreDataProject.xcdatamodeld. Clique neste arquivo, na parte inferior da tela que abrirá terá um botão Add Entity, clique e crie uma entidade que você irá utilizar. Abaixo o meu exemplo:
Agora que já temos nossa entidade denominada "Aula" com seus atributos, temos que definir a classe dessa entidade. Clique na entidade que você criou e olhe o inspetor da direita.
Defina os campos Module e Codegen para os valores acima, Current Product Module e Manual/None, respectivamente.
Em seguida, vá na barra superior e vá em Editor > CreateNSManagedObject Subclass…
Seleciona as entidades que você quer gerar. Você verá novos arquivos na sua lista referente às suas entidades criadas.
Agora falta pouco! Crie um novo arquivo (.swift) dentro do seu projeto, de preferência coloque o nome da sua entidade.
Dentro deste arquivo, coloque o seguinte código:
Coloque o nome de seus atributos com seus respectivos tipos nesse código e altere o nome da struct se preferir, isso fará com que cada objeto do nosso JSON seja um objeto para inserirmos no Core Data.
Depois disso, no nosso exemplo vamos inserir os dados do JSON apenas na primeira vez que o usuário abrir o aplicativo, para isso vamos utilizar a seguinte função Application did Finish Launching With Options dentro do arquivo AppDelegate.swift.
Dentro desta função, colocaremos o seguinte código:
Vamos entender o que está acontecendo, primeiro estamos chamando UserDefaults() que irá utilizar configurações do usuário para o seu app, assim definimos uma chave do tipo booleano chamada opened, por padrão ele é setado como false.
Na linha 9 estamos procurando o caminho do nosso arquivo com o nome de aulas.json, convertemos como URL na linha 11 e já na linha 12 é propriamente o JSON.
Na linha 13 vamos decodificar o JSON, para isso usamos o arquivo (.swift) que criamos, lembra do typealias que criamos?! O meu se chama "Aulas".
Após isso, vamos percorrer todo o JSON que ficou guardado no aulas, que é como se fosse um vetor, assim criamos um registro dentro do loop, esse registro é definido para a entidade Aula (Não se esqueça de colocar para sua entidade), para cada chave desse registro associamos para uma chave da posição do vetor. Por fim, mandamos salvar no Core Data e definimos que a chave "opened" foi aberta, para assim não ter que ficar inserindo novamente os dados sempre que abrir o aplicativo.