Por defecto la llamada al servicio se hace en un hilo secundario por lo que para hacer actualizaciones al UI se necesita envolver el código dentro del bloque DispatchQueue para indicarle que lo haga en el hilo principal.
Hola, Apple
Hablemos de iOS
Conozcamos XCode
¿Necesito un iPhone para ser iOS Developer?
Tu primera app en iOS
¡Hola, Mundo Apple!
Navegación con UINavigationController
Modales en la navegación
Utilizando controles en código
Autolayout vs SwiftUI
Autolayout
Listas con UITableView
Celdas personalizadas para nuestras listas.
Persistencia: UserDefaults
Manejo de dependencias
CocoaPods
Carthage
Servicios Web
Primeros pasos para consumir servicios
Afinando detalles para consumir servicios
Convirtiendo los JSON a modelos
Alamofire
Proyecto: PlatziTweets
Bienvenido a PlatziTweets
Configurando Proyecto
Diseñando vistas iniciales
Configuración de vistas iniciales
Configuración de registro
Descripción de la API de PlatziTweets
Conexión de la API y Autenticación
Registro de usuarios
Diseño del Tweet
Obteniendo Tweets
Creación de vista para publicar Tweets
Publicando Tweets
Borrando Tweets
Integración de la cámara
Conexión con Firebase
Configuración de XCode para correr app
Subir imagen a Firebase
Publicar Tweet con imagen
Tomando Videos para el Tweet
Publicar Tweet con video
Detalles del video
Accediendo al GPS
Implementando mapas con MapsKit
Mostrando todos los estudiantes en el mapa
Retos del proyecto
En producción
Enviar a pruebas con Firebase Distribution
Enviar tu aplicación a APP Store Connect
Distribución de tu app con TestFlight
iOS Avanzado
Dark Mode
SwiftUI
Terminando detalles de una vista con SwiftUI
Objective-C
Hola, iOS Developer
Felicidades
Expert Session: ¡nuevo espacio para resolver tus dudas sobre el desarrollo de Apps para iOS!
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Carlos MejÃa
Aportes 14
Preguntas 1
Por defecto la llamada al servicio se hace en un hilo secundario por lo que para hacer actualizaciones al UI se necesita envolver el código dentro del bloque DispatchQueue para indicarle que lo haga en el hilo principal.
😎
Hice un pequeño reto usando este JSON que me encontre en internet. Al parecer todo bien…
class ViewController: UIViewController
{
@IBOutlet weak var userIDLabel : UILabel!
@IBOutlet weak var idLabel : UILabel!
@IBOutlet weak var titleLabel : UILabel!
@IBOutlet weak var completedLabel : UILabel!
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
override func viewDidLoad()
{
super.viewDidLoad()
// Do any additional setup after loading the view.
fetchServices()
}
private func fetchServices()
{
let URLServer = "https://jsonplaceholder.typicode.com/todos/1"
guard let endpoint = URL(string: URLServer) else
{
return
}
//Inicializacion del Loader
activityIndicator.startAnimating()
URLSession.shared.dataTask(with: endpoint)
{
(data: Data?, _, error: Error?) in
//Detencion del Loader
DispatchQueue.main.async
{
self.activityIndicator.stopAnimating()
}
if error != nil
{
print("Error. Linea hecha por mi.")
return
}
guard let dataFromService = data, let dictionary = try? JSONSerialization.jsonObject(with: dataFromService, options: []) as? [String:Any] else
{
return
}
//Importante: Todos los llamados a la UI; se hacen en el main thread
DispatchQueue.main.async
{
//self.userIDLabel.text = dictionary["userId"] as? String
let userIdIsOne = dictionary["userId"] as? Bool ?? false
self.userIDLabel.text = userIdIsOne ? "Contiene algun valor" : "Pues no..."
let idIsOne = dictionary["id"] as? Bool ?? false
self.idLabel.text = idIsOne ? "Contiene algun valor" : "Al parecer no contiene un valor"
self.titleLabel.text = dictionary["title"] as? String
let isCompleted = dictionary["completed"] as? Bool ?? false
self.completedLabel.text = isCompleted ? "completado" : "no completado"
}
}.resume()
}
}
Super, solo añadirÃa al completion un [weak self] para evitar un retain cycle 😃
Con Xcode 13 cambiaron la forma en la que funcionan las Info.plist, ahora se se completa la Info.plist al hacer el build del target y sólo genera un Info.plist para los cambios que queremos hacer. Ahora debemos hacer los cambios dentro del target y dirigirnos a la tab de Info, entre Resource Tags y Build Settings
no lo eh podido hacer con swif UI ahora menos con StoryBoard 😣.
eh tratato de usar la api get de woocommerce no. 😢
Interesante clase ! Feliz 😄
Buen ejercicio y muy bien explicada las ambas clases
excelente clase!
DispatchQueue.main.async {
self.activityIndicator.hidesWhenStopped = true // para ocultarlo cuando se detiene.
self.activityIndicator.stopAnimating()
}
Final version
Me encanto esta clase, poder lograr entender el codigo y la explicacion me ha llenado de mucho animo para seguir.
La magia de la version Xcode 12.4 es que ya te advierte que debes mover esa linea de codigo a un main thread
Antes de que se acabe el PlatziDay, muy buen curso, muchas gracias. Excelente explicacion. Psdt: No me quiero ir Stark :<
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?