Tutorial iOS – Configurando Projeto para utilizar CoreData
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:
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.
Seu tutorial é pratico e objetivo! Muito bom, mas você já postou a segunda parte?
Obrigado!
Como faço para adicionar o CoreData.framework?