Continuando o tutorial Salvando informações no Banco de Dados nesse post iremos aprender a recuperar as informações salvas no BD e exibi-las em uma Table View.
Vamos colocar a mão na massa e primeiro vamos adicionar a TableView a StoryBoard e na seqüência linka-la ao código.
No arquivo Storyboard adicione uma TableView a nossa primeira ViewController, é a primeira tela a ser exibida ao usuário, conforme podemos observar na imagem a seguir, não irei detalhar os passos pois são operações básicas já ensinadas anteriormente:
Feito isso, no arquivo ViewController.h iremos adicionar o Delegate responsável em controlar a tableView e a DataSource responsável em popular a tableView com informações. Conforme mostrado no código a seguir:
[sourcecode language=”objc” wraplines=”false” collapse=”false”]
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property (weak, nonatomic) IBOutlet UITableView *TableView;
@end
[/sourcecode]
Agora no ViewController.m iremos criar um NSMutableArray global, que será o responsável em armazenar os objetos recuperados do banco.
A Seguir, declaramos a funçao a baixo que realiza a comunicação do banco com o código:
[sourcecode language=”objc” wraplines=”false” collapse=”false”]
– (NSManagedObjectContext *)managedObjectContext
{
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)]) {
context = [delegate managedObjectContext];
}
return context;
}
[/sourcecode]
Por fim, precisamos que toda vez que essa tela for exibida uma nova verificação no banco seja feita e a tabela seja atualizada:
[sourcecode language=”objc” wraplines=”false” collapse=”false”]
– (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// Fetch the devices from persistent data store
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Entity"];
carros = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
[self.TableView reloadData];
}
[/sourcecode]
**ATENÇÃO**
O Nome definido na função initWithEntityName deverá ser o mesmo definido no seu modelo, no arquivo CoreData.xcdatamodeld que no nosso caso será Entity
Agora que já temos a comunicação do código com o Banco de Dados, precisamos utilizar as funções disponíveis no Delegate e no DataSource para exibir as informações na tabela.
[sourcecode language=”objc” wraplines=”false” collapse=”false”]
#pragma mark – TableView
– (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
– (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [carros count];
}
– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (cell == nil) {
cell = [[UITableViewCell alloc] init];
}
// Configure the cell…
NSManagedObject *device = [carros objectAtIndex:indexPath.row];
[cell.textLabel setText:[NSString stringWithFormat:@"%@", [device valueForKey:@"carro"]]];
return cell;
}
[/sourcecode]
** ATENÇÃO **
Para que o aplicativo seja executado com sucesso você deverá:
– Linkar o Delegate e o DataSource a Storyboard (já fizemos coisas semelhantes em aulas passadas)
– Criar uma UITableViewCell dentro da UITableView e definir o seu identificador como Cell conforme indicado a seguir:
Por fim, o resultado da Tabela, após inserirmos 3 Carros será:
Como sugestão de atividade, sugiro que o código seja alterado para realizar o seguinte comportamento:
Assim que a pessoa adicionar um novo item no banco, o aplicativo volte automaticamente para a página anterior e exiba a tabela já atualizada… Fácil, né?
Caso tenha dúvidas, segue o link para download do projeto completo!
Estou disponibilizando para download o código de um programa que toca uma música mp3 que esteja disponível dentro do projeto. Ele será fundamental para a realização do trabalho!
Cara, quero agradecer pelos tutoriais do site para a plataforma iOS, pois é um mercado crescente no Brasil, entretanto não possui muitos desenvolvedores, como o Android por exemplo. Enfim agradeço pelos tutoriais e estarei sempre de olho no site.
Obrigado pelo feedback Fernando..
Mande sugestões e dúvidas sempre que quiser!
Abraços!