Trabalhando com padrões de usuário no Xamarin.iOS

Este artigo aborda o trabalho com NSUserDefault para salvar as configurações padrão em um aplicativo ou extensão Xamarin.iOS.

A NSUserDefaults classe fornece uma maneira para aplicativos e extensões do iOS interagirem programaticamente com o sistema de padrões de todo o sistema. Usando o Sistema de Padrões, o usuário pode configurar o comportamento ou o estilo de um aplicativo para atender às suas preferências (com base no design do aplicativo). Por exemplo, para apresentar dados em medições Métrica vs Imperial ou selecionar um determinado Tema de interface do usuário.

Quando usado com Grupos de Aplicativos, NSUserDefaults também fornece uma maneira de se comunicar entre aplicativos (ou Extensões) dentro de um determinado grupo.

Sobre os padrões do usuário

Como dito acima, os Padrões do Usuário (NSUserDefaults) podem ser adicionados a um Aplicativo (ou Extensão) e usados para fornecer opções configuráveis que o usuário final pode modificar para ajustar a aparência ou a operação do aplicativo em tempo de execução.

Quando seu aplicativo é executado pela primeira vez, NSUserDefaults lê as chaves e os valores do Banco de Dados de Padrões do Usuário do aplicativo e os armazena em cache na memória para evitar a abertura e a leitura do banco de dados sempre que um valor for necessário.

Importante

A Apple não recomenda mais que o desenvolvedor chame o Synchronize método para sincronizar o cache na memória com o banco de dados diretamente. Em vez disso, ele será chamado automaticamente em intervalos periódicos para manter o cache na memória sincronizado com o banco de dados padrão de um usuário.

A NSUserDefaults classe contém vários métodos convenientes para ler e gravar valores de preferência para tipos de dados comuns, como: string, inteiro, float, booleano e URLs. Outros tipos de dados podem ser arquivados usando NSDatao , depois lidos ou gravados no Banco de Dados de Padrões do Usuário. Para obter mais informações, consulte o Guia de Programação de Preferências e Configurações da Apple.

Acessando a instância NSUserDefaults compartilhada

A Instância de Padrões de Usuário Compartilhado fornece acesso aos Padrões de Usuário para o usuário atual do dispositivo. Se o objeto Padrões Compartilhados não existir, ele será criado na primeira vez que for acessado e inicializado com as seguintes informações:

  • Um NSArgumentDomain que consiste nos padrões analisados a partir do aplicativo atual.
  • O domínio Identificador de pacote do aplicativo.
  • Um NSGlobalDomain que consiste nos padrões compartilhados por todos os aplicativos.
  • Um domínio separado para cada um dos idiomas preferidos do usuário.
  • Um NSRegistrationDomain com um conjunto de padrões temporários que podem ser modificados pelo aplicativo para garantir que as pesquisas sejam sempre bem-sucedidas.

Para acessar a instância padrão do usuário compartilhado, use o seguinte código:

// Get Shared User Defaults
var plist = NSUserDefaults.StandardUserDefaults;

Acessando uma instância NSUserDefaults do grupo de aplicativos

Como dito acima, ao usar Grupos de Aplicativos, NSUserDefaults pode ser usado para se comunicar entre Aplicativos (ou Extensões) dentro de um determinado grupo. Primeiro, você precisará garantir que o Grupo de Aplicativos e as IDs de Aplicativo necessárias tenham sido configuradas corretamente na seção Certificados, Identificadores e Perfis no Centro de Desenvolvimento do iOS e tenham sido instaladas no ambiente de desenvolvimento.

Em seguida, seus projetos de Aplicativo e/ou Extensão precisam ter uma das IDs de Aplicativo válidas criadas acima, e o Entitlements.plist arquivo precisa ser incluído no Pacote de Aplicativos com os Grupos de Aplicativos habilitados e especificados.

Com tudo isso em vigor, os Padrões de Usuário do Grupo de Aplicativos compartilhados podem ser acessados usando o seguinte código:

// Get App Group User Defaults
var plist = new NSUserDefaults ("group.com.xamarin.todaysharing", NSUserDefaultsType.SuiteName);

Onde group.com.xamarin.todaysharing é o Grupo de Aplicativos criado em Certificados, Identificadores e Perfis que você deseja acessar. Para obter mais informações, consulte a documentação de Recursos do Grupo de Aplicativos .

Lendo valores padrão

Depois de acessar o Banco de Dados Padrão do Usuário desejado, você pode ler valores dos padrões usando Pares Chave/Valor e vários métodos de conveniência com base no tipo de dados que está sendo lido:

  • ArrayForKey - Retorna uma matriz de para o valor de NSObjects chave fornecido.
  • BoolForKey - Retorna um valor booleano para a chave fornecida.
  • DataForKey - Retorna um NSData objeto para a chave fornecida.
  • DictionaryForKey - Retorna um NSDictionary para a chave dada.
  • DoubleForKey - Retorna um valor duplo para a chave fornecida.
  • FloatForKey - Retorna um valor float para a chave fornecida.
  • IntForKey - Retorna um valor inteiro para a chave fornecida.
  • StringArrayForKey - Retorna uma matriz de String objetos do valor de chave fornecido.
  • StringForKey - Retorna um valor de cadeia de caracteres para a chave fornecida.
  • URLForKey - Retorna um NSUrl valor para a chave fornecida.

Por exemplo, o código a seguir leria um valor booleano dos Padrões do Usuário:

// Get Shared User Defaults
var plist = NSUserDefaults.StandardUserDefaults;
...

// Get value
var useHeader = plist.BoolForKey("UseHeader");

Gravando valores padrão

Assim como a leitura dos valores acima, depois de acessar o Banco de Dados Padrão do Usuário desejado, você pode gravar valores nos padrões usando Pares de Chave/Valor e vários métodos de conveniência com base no tipo de dados que está sendo gravado:

  • SetBool - Grava o valor booleano dado para a chave dada.
  • SetDouble - Grava o valor duplo dado para a chave dada.
  • SetFloat - Grava o valor float dado para a chave dada.
  • SetString - Grava o valor de cadeia de caracteres fornecido para a chave fornecida.
  • SetURL - Grava o valor de URL (NSUrl) fornecido para a chave fornecida.

Por exemplo, o código a seguir gravaria um valor booleano para os padrões do usuário:

// Get Shared User Defaults
var plist = NSUserDefaults.StandardUserDefaults;
...

// Save value
plist.SetBool(useHeader, "UseHeader");
...

Importante

Quando seu aplicativo é executado pela primeira vez, NSUserDefaults lê as chaves e os valores do banco de dados de padrões do usuário do aplicativo e os armazena em cache na memória para evitar a abertura e a leitura do banco de dados sempre que um valor é necessário.

Resumo

Este artigo abordou a NSUserDefaults classe e como ela pode ser usada para fornecer um conjunto de opções que o usuário final pode usar para configurar seu aplicativo Xamarin.iOS. Além disso, abordou o uso de Grupos de Aplicativos para se comunicar entre uma extensão e seu Aplicativo Pai ou entre aplicativos em um grupo.