Cómo llamar referencia Firebase sólo cuando se selecciona la barra de pestañas Ver

votos
0

Soy relativamente nuevo en Xcode / Swift para disculpas de antemano. Tengo un controlador bar Tab con 4 pestañas. Cada pestaña tiene una vista controlador de navegación incrustado dentro. Funcionado y se puede seleccionar cada una de las 4 pestañas.

Tengo 2 ramas en una base de datos Firebase, ejemplo:

gimnasio - gym1 - image_url: someURL

Y

usuario - id de usuario - gimnasia: gym1

En la primera pestaña (que aparece cuando el usuario inicia la sesión) el image_url asociada a su gimnasio se visualiza. En la pestaña cuarto, el usuario puede editar su perfil, que incluye la edición de su gimnasio.

Mi problema es las dos opciones que tengo para obtener estos datos de Firebase está bien observar o observeSingleEvent.

Si uso observeSingleEvent para extraer estos datos de Firebase, sólo funciona cuando se muestra inicialmente el usuario inicia sesión y la barra de pestañas. Si el usuario cambia su gimnasio en la pestaña 4 y se remonta a la primera, todavía mostrará la primera imagen cargada.

Si uso observar, se desprende de la consola que en la pestaña cuarto, el momento en que el usuario cambia su gimnasio, los datos se extrae de Firebase, a pesar de que la pestaña asociada no está abierto. Volviendo a la primera pestaña muestra el gimnasio correcto ahora.

Yo preferiría que en lugar de cualquiera de los anteriores, el código asociado con el controlador de vista incrustada en la primera pestaña está recién ejecutado sólo cuando se hace clic en esa primera pestaña. Se puede hacer esto?

class GymViewController: UIViewController {

@IBOutlet weak var gym_imageView: UIImageView!

var gym:String = 
var image_url:String = 

override func viewDidLoad() {
    super.viewDidLoad()
    getActiveGym()
}


func getActiveGym() {

    let userID = Auth.auth().currentUser?.uid
    print(userID: \(userID!))
    var ref: DatabaseReference!

    ref = Database.database().reference()
    print(ref: \(ref!))
    ref.child(users).child(userID!).observeSingleEvent(of: .value, with {(DataSnapshot) in

            let value = DataSnapshot.value as? NSDictionary
            self.gym = value?[gym] as? String ?? 
            self.getUrl()
    })

O

    ref.child(users).child(userID!).observe(.value, with: {(DataSnapshot) in

        let value = DataSnapshot.value as? NSDictionary
        self.gym = value?[gym] as? String ?? 
        self.getUrl()
    })

  }strong text
Publicado el 09/10/2019 a las 19:02
fuente por usuario
En otros idiomas...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more