Как вызывать ссылку на Firebase, только когда выбрано представление панели вкладок - PullRequest
0 голосов
/ 09 октября 2019

Я относительно новичок в xcode / swift, поэтому заранее извиняюсь. У меня есть контроллер панели вкладок с 4 вкладками. Каждая вкладка имеет встроенный вид контроллера навигации. Это работает, и я могу выбрать каждую из 4 вкладок.

У меня есть 2 ветви в базе данных Firebase, пример:

gym - gym1 - image_url: " someURL"

AND

user - userId - gym:" gym1"

На 1-й вкладке (отображается при входе пользователя в систему)) отображается "image_url", связанный с их "тренажерным залом". На 4-й вкладке пользователь может редактировать свой профиль, в том числе редактировать свой «тренажерный зал».

Моя проблема в том, что у меня есть два варианта получения этих данных из Firebase: «Наблюдать» или «Наблюдать за Синглом».

Если я использую «наблюдаем единый случай», чтобы извлечь эти данные из Firebase, это работает только тогда, когда пользователь входит в систему и панель вкладок первоначально отображается. Если пользователь сменит свой тренажерный зал на 4-й вкладке и вернется к 1-й, он все равно покажет первое загруженное изображение.

Если я использую «Наблюдение», из консоли на 4-й вкладке появится сообщение:В тот момент, когда пользователь меняет свой спортзал, данные извлекаются из Firebase, даже если соответствующая вкладка не открыта. Возвращаясь к 1-й вкладке, вы увидите правильный тренажерный зал.

Я бы предпочел, чтобы вместо любого из вышеперечисленного код, связанный с контроллером представления, встроенным в 1-ю вкладку, выполнялся только тогда, когда эта 1-я вкладканажал на. Можно ли это сделать?

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()
    })

ИЛИ

    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...