Я относительно новичок в 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