Persistência de Dados em iOS: Gerenciamento de Arquivos Plist

Arquivos de lista de propriedades, conhecidos como plist (Property List), representam uma forma eficiente e nativa de armazenar pequenos volumes de dados estruturados no ecossistema iOS. Eles utilizam o modelo de chave-valor para organizar informações serializadas, sendo ideais para configurações de usuários ou estados simples da aplicação.

1. Criação de Diretórios e Arquivos Plist

Para manipular arquivos no sistema de arquivos do iOS, utilizamos a classe NSFileManager. O exemplo abaixo demonstra como localizar o diretório de documentos do aplicativo, criar uma pasta personalizada e gerar o arquivo de destino.

NSFileManager *fileManager = [NSFileManager defaultManager];
// Localiza o caminho para o diretório Documents na Sandbox do app
NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

// Define o caminho para um novo diretório chamado "AppData"
NSString *customDir = [docsPath stringByAppendingPathComponent:@"AppData"];

// Verifica se o diretório existe, caso contrário, cria-o
if (![fileManager fileExistsAtPath:customDir]) {
    [fileManager createDirectoryAtPath:customDir withIntermediateDirectories:YES attributes:nil error:nil];
}

// Define o caminho completo do arquivo .plist
NSString *fullPath = [customDir stringByAppendingPathComponent:@"settings.plist"];

// Cria o arquivo fisicamente se ele não existir
if (![fileManager fileExistsAtPath:fullPath]) {
    [fileManager createFileAtPath:fullPath contents:nil attributes:nil];
}

2. Inserção e Atualização de Informações

A escrita em arquivos plist é comumente feita através de dicionários (NSDictionary ou NSMutableDictionary). Ao salvar, o conteúdo anterior do arquivo é substituído pelo estado atual do objeto em memória.

// Instancia o dicionário principal para gerenciar os dados
NSMutableDictionary *rootData = [[NSMutableDictionary alloc] init];

// Cria um sub-dicionário com informações específicas
NSMutableDictionary *profileInfo = [[NSMutableDictionary alloc] init];
[profileInfo setObject:@"Joao_Silva" forKey:@"username"];
[profileInfo setObject:@"Premium" forKey:@"account_type"];

// Adiciona o sub-dicionário ao objeto principal usando uma chave identificadora
[rootData setObject:profileInfo forKey:@"user_profile"];

// Escreve os dados no arquivo de forma atômica para garantir integridade
BOOL success = [rootData writeToFile:fullPath atomically:YES];
if (success) {
    NSLog(@"Dados gravados com sucesso!");
}

3. Remoção de Entradas Específicas

Para deletar um registro, é necessário carregar o conteúdo do arquivo em um objeto mutável, remover o objeto associado à chave desejada e salvar o arquivo novamente.

// Carrega o conteúdo atual do arquivo em um dicionário mutável
NSMutableDictionary *existingData = [[NSMutableDictionary alloc] initWithContentsOfFile:fullPath];

if (existingData) {
    // Remove a entrada correspondente à chave informada
    [existingData removeObjectForKey:@"user_profile"];
    
    // Persiste a alteração no disco
    [existingData writeToFile:fullPath atomically:YES];
}

4. Leitura e Consulta de Dados

A recuperação dos dados é direta. Basta inicializar um dicionário apontando para o caminho do arquivo no sistema.

// Lê o arquivo plist e armazena o conteúdo em um dicionário de leitura
NSDictionary *dataContent = [NSDictionary dictionaryWithContentsOfFile:fullPath];

if (dataContent != nil) {
    NSLog(@"Conteúdo recuperado: %@", dataContent);
    
    // Acessando um valor específico
    NSDictionary *profile = [dataContent objectForKey:@"user_profile"];
    NSLog(@"Username: %@", [profile objectForKey:@"username"]);
}

Tags: ios Objective-C Plist NSFileManager NSDictionary

Publicado em 7-27 03:08