Trabajar con valores predeterminados de usuario en Xamarin.iOS

En este artículo se explica cómo trabajar con NSUserDefault para guardar la configuración predeterminada en una aplicación o extensión de Xamarin.iOS.

La NSUserDefaults clase proporciona una manera de que las aplicaciones y extensiones de iOS interactúen mediante programación con el sistema predeterminado de todo el sistema. Con el sistema predeterminado, el usuario puede configurar el comportamiento o el estilo de una aplicación para satisfacer sus preferencias (en función del diseño de la aplicación). Por ejemplo, para presentar datos en medidas métricas frente a imperiales o seleccionar un tema de interfaz de usuario determinado.

Cuando se usa con grupos de aplicaciones, NSUserDefaults también proporciona una manera de comunicarse entre aplicaciones (o extensiones) dentro de un grupo determinado.

Acerca de los valores predeterminados del usuario

Como se indicó anteriormente, los valores predeterminados de usuario (NSUserDefaults) se pueden agregar a una aplicación (o extensión) y se usan para proporcionar opciones configurables que el usuario final puede modificar para ajustar la apariencia o el funcionamiento de la aplicación en tiempo de ejecución.

Cuando la aplicación se ejecuta por primera vez, NSUserDefaults lee las claves y los valores de la base de datos predeterminadas de usuario de la aplicación y los almacena en caché en la memoria para evitar abrir y leer la base de datos cada vez que se requiere un valor.

Importante

Apple ya no recomienda que el desarrollador llame al Synchronize método para sincronizar la caché en memoria con la base de datos directamente. En su lugar, se llamará automáticamente a intervalos periódicos para mantener la caché en memoria sincronizada con la base de datos predeterminada de un usuario.

La NSUserDefaults clase contiene varios métodos útiles para leer y escribir valores de preferencias para tipos de datos comunes como: string, integer, float, boolean y URLs. Otros tipos de datos se pueden archivar mediante NSDatay, a continuación, leer o escribir en la base de datos de valores predeterminados de usuario. Para obtener más información, consulte Preferencias y Configuración Guía de programación de Apple.

Acceso a la instancia de NSUserDefaults compartida

La instancia predeterminada del usuario compartido proporciona acceso a los valores predeterminados de usuario para el usuario actual del dispositivo. Si el objeto Valores predeterminados compartidos no existe, se crea la primera vez que se accede e inicializa con la siguiente información:

  • que NSArgumentDomain consta de los valores predeterminados analizados de la aplicación actual.
  • Dominio de identificador de lote de la aplicación.
  • que NSGlobalDomain consta de los valores predeterminados compartidos por todas las aplicaciones.
  • Un dominio independiente para cada uno de los idiomas preferidos del usuario.
  • con NSRegistrationDomain un conjunto de valores predeterminados temporales que la aplicación puede modificar para asegurarse de que las búsquedas siempre se realizan correctamente.

Para acceder a la instancia predeterminada del usuario compartido, use el código siguiente:

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

Acceso a una instancia NSUserDefaults del grupo de aplicaciones

Como se indicó anteriormente, mediante el uso de grupos de aplicaciones, NSUserDefaults se puede usar para comunicarse entre aplicaciones (o extensiones) dentro de un grupo determinado. En primer lugar, deberá asegurarse de que el grupo de aplicaciones y los identificadores de aplicación necesarios se han configurado correctamente en la sección Certificados, Identificadores y perfiles de iOS Centro de desarrollo y se han instalado en el entorno de desarrollo.

A continuación, los proyectos de aplicación o extensión deben tener uno de los identificadores de aplicación válidos creados anteriormente y el Entitlements.plist archivo debe incluirse en el paquete de aplicaciones con los grupos de aplicaciones habilitados y especificados.

Con esto todo en su lugar, se puede acceder a los valores predeterminados de usuario del grupo de aplicaciones compartidos mediante el código siguiente:

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

Donde group.com.xamarin.todaysharing es el grupo de aplicaciones creado en certificados, identificadores y perfiles a los que desea acceder. Para obtener más información, consulte la documentación sobre las funcionalidades del grupo de aplicaciones.

Lectura de valores predeterminados

Una vez que haya accedido a la base de datos predeterminada de usuario deseada, puede leer valores de los valores predeterminados mediante pares clave-valor y varios métodos útiles basados en el tipo de datos que se lee:

  • ArrayForKey : devuelve una matriz de para el valor de NSObjects clave especificado.
  • BoolForKey : devuelve un valor booleano para la clave especificada.
  • DataForKey : devuelve un NSData objeto para la clave especificada.
  • DictionaryForKey : devuelve un NSDictionary para la clave especificada.
  • DoubleForKey : devuelve un valor doble para la clave especificada.
  • FloatForKey : devuelve un valor float para la clave especificada.
  • IntForKey : devuelve un valor entero para la clave especificada.
  • StringArrayForKey : devuelve una matriz de objetos del valor de String clave especificado.
  • StringForKey : devuelve un valor de cadena para la clave especificada.
  • URLForKey : devuelve un NSUrl valor para la clave especificada.

Por ejemplo, el código siguiente leería un valor booleano de los valores predeterminados de usuario:

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

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

Escribir valores predeterminados

Al igual que leer los valores anteriores, después de tener acceso a la base de datos predeterminada de usuario deseada, puede escribir valores en los valores predeterminados mediante pares clave-valor y varios métodos útiles basados en el tipo de datos que se escriben:

  • SetBool : escribe el valor booleano especificado en la clave especificada.
  • SetDouble - Escribe el valor doble especificado en la clave especificada.
  • SetFloat : escribe el valor float especificado en la clave especificada.
  • SetString : escribe el valor de cadena especificado en la clave especificada.
  • SetURL : escribe el valor de dirección URL (NSUrl) especificado en la clave especificada.

Por ejemplo, el código siguiente escribiría un valor booleano en los valores predeterminados de usuario:

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

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

Importante

Cuando se ejecuta la aplicación por primera vez, NSUserDefaults lee las claves y los valores de la base de datos predeterminadas de usuario de la aplicación y los almacena en caché en la memoria para evitar abrir y leer la base de datos cada vez que se requiere un valor.

Resumen

En este artículo se ha tratado la NSUserDefaults clase y cómo se puede usar para proporcionar un conjunto de opciones que el usuario final puede usar para configurar la aplicación de Xamarin.iOS. Además, se trata el uso de grupos de aplicaciones para comunicarse entre una extensión y su aplicación primaria o entre aplicaciones de un grupo.