Tutorial iOS – Configurando Projeto para utilizar CoreData

On 2 de julho de 2014 by Conrado Carneiro

Hoje iremos introduzir o CoreData, essencial para quem deseja trabalhar com Banco de Dados local na aplicação.
O CoreData é um framework responsável em gerenciar leitura, escrita e pesquisa no banco de dados, que no caso do iOS é o SQLite3.

Então, mãos a obra!

Vamos criar um novo projeto:
Abra o XCode -> Create a New XCode Project, escolha no menu a esquerda iOS -> Application e no menu a direita escolha Single View Application  conforme mostrado na imagem a seguir:
1

Defina o nome do Projeto, que no nosso caso será AulaCoreData.

Pronto, criado o projeto vamos agora começar a configuração necessária para utilização do CoreData.

1. Adicione ao projeto o Framework CoreData.framework
(Nos já adicionamos frameworks anteriormente, e saber isso é primordial)

2. No arquivo: AppDelegate.h adicione os seguintes códigos:

#import <CoreData/CoreData.h>

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;

– (void)saveContext;
– (NSURL *)applicationDocumentsDirectory;

Já no arquivo AppDelegate.m precisaremos definir as funções  e sintetizar os objetos criados.
3.  No cabeçalho do arquivo, após o @implementation AppDelegate

@synthesize managedObjectContext = _managedObjectContext;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;

em seguida devemos definir as funções necessárias para manipular o CoreData.

Função responsável em salvar todas as modificações no banco.

[sourcecode language=”objc” wraplines=”false” collapse=”false”]
– (void)saveContext
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil) {
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
}
[/sourcecode]

[sourcecode language=”objc” wraplines=”false” collapse=”false”]
#pragma mark – Core Data stack
– (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext != nil) {
return _managedObjectContext;
}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
[/sourcecode]

[sourcecode language=”objc” wraplines=”false” collapse=”false”]
– (NSManagedObjectModel *)managedObjectModel
{
if (_managedObjectModel != nil) {
return _managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"CoreData" withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return _managedObjectModel;
}
[/sourcecode]

[sourcecode language=”objc” wraplines=”false” collapse=”false”]
– (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreData.sqlite"];

NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}

return _persistentStoreCoordinator;
}
[/sourcecode]

[sourcecode language=”objc” wraplines=”false” collapse=”false”]
#pragma mark – Application’s Documents directory
– (NSURL *)applicationDocumentsDirectory
{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
[/sourcecode]

Por fim, dentro da função (void)applicationWillTerminate:(UIApplication *)application iremos chamar a SaveContext ficando da seguinte forma:

[sourcecode language=”objc” wraplines=”false” collapse=”false”]
– (void)applicationWillTerminate:(UIApplication *)application {
[self saveContext];
}
[/sourcecode]

** ATENÇÃO **
* Na função  – (NSManagedObjectModel *)managedObjectModel definimos o nome do arquivo que irá mapear o banco de dados, no caso o nome que definimos foi: CoreData com o formato momd e precisaremos cria-lo em seguida, com o MESMO nome.

* Já na função  (NSPersistentStoreCoordinator *)persistentStoreCoordinator definimos o nome do arquivo do Banco de Dados que será criado, que será criado em tempo de execução, e definimos com o nome: CoreData.sqlite.

Agora vamos criar o arquivo que irá mapear o banco de dados, para isso siga os seguintes passos:
File -> New -> File. No menu a esquerda vá em iOS -> CoreData e no menu a esquerda escolha Data Model lembrando que o nome deverá ser: CoreData, pois já definimos ele anteriormente.

Pronto, já temos o projeto devidamente configurado para utilizar o CoreData, no proximo tutorial iremos utilizarmos esses recursos.

2 Responses to “Tutorial iOS – Configurando Projeto para utilizar CoreData”

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *