iOS SDK Trabajar con NSUserDefaults

En este tutorial, demostraré cómo usar la clase NSUserDefaults para guardar y actualizar la configuración de la aplicación. En el proceso, construiremos una aplicación de demostración llamada "Contacto" que almacenará una imagen proporcionada por el usuario e información de contacto..

¿Qué es la clase NSUserDefaults??

Con la clase NSUserDefaults, puede guardar configuraciones y propiedades relacionadas con la aplicación o los datos del usuario. Por ejemplo, puede guardar una imagen de perfil establecida por el usuario o un esquema de color predeterminado para la aplicación. Los objetos se guardarán en lo que se conoce como el sistema predeterminado de iOS. El sistema de valores predeterminados de iOS está disponible en todo el código de su aplicación, y cualquier información guardada en el sistema de valores predeterminados persistirá durante las sesiones de la aplicación. Esto significa que incluso si el usuario cierra su aplicación o reinicia su teléfono, los datos guardados estarán disponibles la próxima vez que abran la aplicación.!

Con NSUserDefaults puede guardar objetos de los siguientes tipos de clase:

  • NSData
  • NSString
  • NSNumber
  • NSDate
  • NSArray
  • NSDiccionario

Si desea almacenar cualquier otro tipo de objeto, como un UIImage, normalmente necesitará archivarlo o envolverlo en una instancia de NSData, NSNumber o NSString.

Ahora que sabe un poco acerca de lo que se puede hacer con NSUserDefaults, comencemos a aprender cómo usar el sistema predeterminado con una aplicación de ejemplo simple que almacenará información de contacto..

Paso 1: Creando el Proyecto

Abra Xcode y seleccione "Crear un nuevo proyecto Xcode". Seleccione una aplicación basada en vista y haga clic en Siguiente. Ingrese un nombre para su proyecto (¿He llamado el mío? ¿Contacto?). Ingrese su Identificador de empresa y asegúrese de seleccionar iPhone para la familia de dispositivos, porque vamos a hacer una aplicación para iPhone. Si ha terminado, haga clic en siguiente. Elija un lugar para guardar su proyecto y luego haga clic en crear.

Paso 2: Diseñar la interfaz

¿En el? ¿Contacto? ¿Carpeta en el? Project Navigator? haga clic en ContactViewController.xib.

Arrastre tres campos de extensión de la biblioteca a la vista y ordénelos como se muestra a continuación. Haga lo mismo con un UIImageView y dos botones redondos Rect.

Haga clic en el primer campo de texto y escriba? Nombre? en el campo de texto Marcador de posición. Ahora haga clic en el segundo campo de texto y escriba? Apellido? en el campo de texto Marcador de posición. Por último, haga clic en el tercer y último campo de texto y escriba? Edad? en el campo de texto Marcador de posición. Para el tipo de teclado, seleccione el teclado numérico, ya que solo necesitará números para ingresar su edad.

Cambia el texto del primer botón para 'Guardar? y el texto del segundo botón para? Elegir imagen?.

Ahora vamos a hacer las conexiones. Xcode 4 tiene una nueva forma fácil y rápida de hacerlo. Seleccione el botón central del editor para mostrar el editor asistente?.

Haga clic en el primer nombre TextField y CTRL-arrastre a la interfaz. Aparecerá una ventana emergente, ingrese? FirstNameTextField? para el nombre y haga clic en "conectar".

Haga lo mismo con el campo de texto Apellido y edad y UIImageView, pero llámelos lastNameTextField, ageTextField y contactImageView. Para los botones necesitamos cambiar la conexión a Acción en lugar de Outlet. Por lo tanto, presione CTRL y arrastre desde el botón Guardar a la interfaz, pero esta vez debajo de las llaves. Cambia la Conexión a la Acción y escribe? Guardar? por nombre Haga lo mismo con el botón Elegir imagen, pero esta vez ingrese? ElegirImagen? por nombre Ahora el código del ContactViewController.h debería leerse como sigue:

#importar  @interface ContactViewController: UIViewController IBOutlet UIImageView * contactImageView; IBOutlet UITextField * firstNameTextField; IBOutlet UITextField * lastNameTextField; IBOutlet UITextField * ageTextField;  - (IBAction) guardar: (id) remitente; - (IBAction) elige Imagen: (id) remitente; @fin

Ahora hemos terminado con la interfaz. Haga clic en Construir y ejecutar para ver si se ejecuta correctamente. Introduce algún texto y cierra la aplicación. Si vuelve a abrir la aplicación, es probable que vea que el texto que ingresó todavía está allí. Si es así, esto se debe a la capacidad multitarea incorporada de iOS. Si elimina la aplicación de la barra de tareas múltiples y abre la aplicación nuevamente, verá que el texto que ingresó se fue. En este tutorial usaremos NSUserDefaults para guardar la información ingresada incluso si realmente? cierra la aplicación Esto permitirá que los datos persistan a través de múltiples sesiones..

Paso 3: Elegir una imagen

Vuelva al modo Editor estándar, para que tenga más espacio para trabajar. Abra ContactViewController.h y agregue UIImagePickerControllerDelegate y UINavigationControllerDelegate.

Si ha terminado con eso, abra el ContactViewController.m y desplácese hacia abajo hasta la acción ChooseImage y modifique el código para que lea como sigue:

- (IBAction) elige Imagen: (id) remitente UIImagePickerController * picker = [[[[UIImagePickerController alloc] init] autorelease]; picker.delegate = self; picker.allowsEditing = YES; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [self presentModalViewController: selector animado: YES]; 

Primero, creamos un UIImagePickerController, luego establecemos el delegado en self. A continuación, habilitamos la edición del usuario, luego establecemos el tipo de fuente en la biblioteca de fotos y, finalmente, lo mostramos con una animación para el usuario..

En Elegir acción de imagen, agregue los siguientes métodos de delegación de selección de imágenes:

#pragma mark - Image Picker Delegate - (void) imagePickerController: (UIImagePickerController *) picker didFinishPickingImage: (UIImage *) image editingInfo: (NSDictionary *) editingInfo contactImageView.image = image; [picker dismissModalViewControllerAnimated: YES];  - (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker [picker dismissModalViewControllerAnimated: YES]; 

En el primer método, configuramos la imagen contactImageView a la imagen seleccionada y luego descartamos el UIImagePickerController. En el segundo método, solo descartamos el UIImagePickerController.

Paso 4: Guardar los datos

Puede guardar texto con la función: setObject: (id) forKey: (NSString *). La clave debe ser una clave específica para el objeto que guarda, ya que también necesita esa clave para obtener los datos guardados. Puede guardar enteros con la función: setInteger: (NSInteger) forKey: (NSString *). Para guardar la imagen, primero necesitamos crear una instancia de NSData a partir de ella..
Vaya a la acción de guardar y modifique el código para leer de la siguiente manera:

- (IBAction) guardar: (id) remitente // Ocultar el teclado [firstNameTextField resignFirstResponder]; [lastNameTextField resignFirstResponder]; [ageTextField resignFirstResponder]; // Crear cadenas y un entero para almacenar la información de texto NSString * firstName = [firstNameTextField text]; NSString * lastName = [lastNameTextField text]; int age = [[ageTextField text] integerValue]; // Crear instancias de NSData UIImage * contactImage = contactImageView.image; NSData * imageData = UIImageJPEGRepresentation (contactImage, 100); // Almacena los datos NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; [predeterminado setObject: firstName forKey: @ "firstName"]; [predeterminado setObject: lastName forKey: @ "lastname"]; [por defecto setInteger: age forKey: @ "age"]; [por defecto setObject: imageData forKey: @ "image"]; [los valores predeterminados sincronizan]; NSLog (@ "Datos guardados"); 

Primero escondemos el teclado. Luego creamos cadenas del texto que ingresó en el primer y último campo de texto del nombre. También creamos un número entero de la edad que ingresaste. Entonces almacenamos la imagen de contactImageView como un objeto NSData, porque no podemos guardar un UIImage directamente con NSUserDefaults. Luego almacenamos los datos, llamamos a la función standardUserDefaults para guardar los datos en ella. Por fin sincronizamos la base de datos standardUserDefaults.

Paso 5: Obtenga los datos guardados

Por fin queremos obtener los datos guardados. Hacemos esto en el método viewDidLoad, porque ese método se llama cuando se abre la aplicación. Desplácese hacia abajo hasta la vista? ViewDidLoad? Método, descoméntelo y modifique el código de la siguiente manera:

- (void) viewDidLoad // Obtenga los datos almacenados antes de que la vista cargue NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; NSString * firstName = [por defecto objectForKey: @ "firstName"]; NSString * lastName = [por defecto objectForKey: @ "lastname"]; int age = [defaults integerForKey: @ "age"]; NSString * ageString = [NSString stringWithFormat: @ "% i", age]; NSData * imageData = [por defecto dataForKey: @ "image"]; UIImage * contactImage = [UIImage imageWithData: imageData]; // Actualizar los elementos de la interfaz de usuario con los datos guardados firstNameTextField.text = firstName; lastNameTextField.text = lastName; ageTextField.text = ageString; contactImageView.image = contactImage; [super viewDidLoad]; 

Primero llamamos nuevamente a la función standardUserDefaults, para que podamos obtener los datos guardados. Ponemos el nombre y apellido en una NSString. Aunque la edad es un entero, creamos una cadena para almacenarla, porque no podemos establecer directamente el texto de un TextField en un entero. Colocamos la imagen en un objeto NSData y luego creamos un UIImage a partir del objeto NSData. Finalmente, actualizamos el elemento UI con los datos guardados..

Ahora que la aplicación está terminada, compírela y ejecútela de nuevo. Ingrese sus datos y seleccione una imagen. Cierre la aplicación desde la barra de tareas múltiples y luego vuelva a abrirla. Los datos aún deben estar allí esta vez, y si es así, nuestra aplicación de demostración funciona!

¡Gracias por leer este tutorial sobre NSUserDefaults! Si tiene preguntas o comentarios sobre este tutorial, déjelos en la sección de comentarios a continuación!

Y si desea mejorar como desarrollador de iOS, ¿por qué no echa un vistazo a la amplia gama de plantillas de aplicaciones de iOS en Envato Market? Puede usarlos como base para desarrollar sus propias aplicaciones, así como para inspeccionar el código con control de calidad y aprender de él..

O navegue por los servicios de desarrollo de aplicaciones en Envato Studio para crear una aplicación para usted de principio a fin!

Servicios de desarrollo de aplicaciones en Envato Studio