Persistencia en dispositivos móviles - iOS
  • Introduction
  • Persistencia básica
    • El sistema de archivos
    • Serialización de clases
    • Property Lists
    • Preferencias de usuario
    • Ejercicios
  • SQLite
    • Introducción a SQLite en iOS
    • El API básico de SQLite
    • Frameworks de terceros
    • Ejercicios
  • ¡Hola Core Data!. Una aplicación de ejemplo
    • Introducción a Core Data
    • El stack de Core Data
    • Las entidades
    • Recuperar los datos
  • Modelos de datos en Core Data
    • Crear modelos
    • Entidades con clases propias
    • CRUD
    • Ejercicios
  • Más sobre modelos de datos
    • Tipos de datos transformables
    • Validaciones
    • El ciclo de vida de los objetos gestionados
    • Deshacer y rehacer operaciones
    • Ejercicios
  • Búsquedas en Core Data
    • Predicados
    • Ordenación
    • Ejercicios
  • Tablas en Core Data
    • El fetched results controller
    • Inicializar el "fetched results controller"
    • Mostrar los datos en la tabla
    • Refrescar la tabla
    • Secciones de tabla automáticas
    • Ejercicios
  • Migraciones de datos
    • Qué son las migraciones de datos
    • Versiones del modelo de datos
    • Migraciones ligeras
    • Migraciones pesadas
    • Ejercicios
    • Apéndice: migraciones en iOS<=9
  • Contextos múltiples
    • Múltiples contextos para trabajos en background
    • Comunicación entre contextos
    • Contextos anidados
    • Ejercicios
  • Persistencia como servicio
    • Backend as a Service
    • Gestión de usuarios en Firebase
    • Persistencia en Firebase
    • Ejercicios
  • Arquitecturas de aplicaciones en iOS
    • Model/View/Controller
    • Model/View/Presenter
    • Model/View/ViewModel
    • VIPER
    • Ejercicios parte I
    • Ejercicios parte II
    • Ejercicios parte III
Powered by GitBook
On this page
  • Ejercicios de arquitecturas iOS, parte II
  • Carpetas para los fuentes
  • Ensamblaje de vista, modelo y viewmodel (1 punto)
  • Mostrar la descripción del tiempo (4 puntos)
  • Mostrar el icono del tiempo (3 puntos)

Was this helpful?

  1. Arquitecturas de aplicaciones en iOS

Ejercicios parte II

Ejercicios de arquitecturas iOS, parte II

Tenemos la aplicación para consultar el tiempo que ya usamos en el módulo de tecnologías de desarrollo y queremos cambiarla para que en lugar de usar MVC use MVVM.

IMPORTANTE: Abre el .xcworkspace, no el .xcodeproj como habitualmente. Tras abrirlo deberías ver dos proyectos: el principal Eltiempo y otro "secundario" Pods con las librerías necesarias. Haz un build del proyecto antes de empezar a trabajar con él, para que se compile la librería Bond y las otras dependencias.

Carpetas para los fuentes

Lo primero será crear las "carpetas" necesarias para los fuentes (o groups como se llaman en Xcode)

  • Crea un group llamado Vista (File > New group...) y mueve a él la clase ViewController, ya que en MVVM el ViewController es parte de la vista.

  • Crear otro group llamado ViewModel y en él crear un archivo TiempoViewModel con una clase del mismo nombre vacía por el momento

Ensamblaje de vista, modelo y viewmodel (1 punto)

En la clase de la vista (el ViewController) añadir una propiedad que represente al viewmodel

let viewModel = TiempoViewModel()

En el TiempoViewModel añadir una propiedad que represente al modelo

let modelo = TiempoModelo()

Mostrar la descripción del tiempo (4 puntos)

En este apartado conseguiremos que al pulsar en el botón "consultar tiempo" la descripción en modo texto (p.ej. "sol") aparezca en la pantalla del dispositivo.

En el TiempoViewModel

  • Añade un import Bond

  • Crear un observable de tipo String llamado estado, con valor inicial la cadena vacía (mira la sintaxis en transparencias/apuntes)

  • Crea un método consultarTiempo que admita como parámetro un String con el nombre de la localidad a consultar

func consultarTiempo(de localidad : String) {
  //AQUI
  1. LLama a consultarTiempo del modelo. Pásale la localidad y como segundo parámetro una clausura a la que el modelo llamará cuando el servidor devuelva el estado del tiempo. Esta clausura recibe dos parámetros, el estado del tiempo como una cadena, y otra cadena con la url del icono que lo representa
  2. Dentro de esa clausura actualiza el observable "estado" con el valor del primer parámetro, más tarde nos ocuparemos del icono 
}

Ahora en la vista

  • en el método consultarTiempoPulsado sustituir la llamada al modelo por

self.viewModel.consultarTiempo(de: loc)
  • en el viewDidLoad() vincular la propiedad estado del viewModel al texto de la etiqueta estadoLabel

Mostrar el icono del tiempo (3 puntos)

  • Haz lo mismo para el icono del tiempo, solo que será más complicado ya que vinculamos un String con un icono (UIImage)

.filter {
  icono in
  return icono != ""
}
.map {
  icono in
  let urlIcono = URL(string:icono)!
  let datosIcono = try! Data(contentsOf:urlIcono)
  let imgIcono = UIImage(data: datosIcono)
  return imgIcono!
}
PreviousEjercicios parte INextEjercicios parte III

Last updated 6 years ago

Was this helpful?