Я пытаюсь передать некоторую информацию через переход от TableView к ViewController.
Благодаря моей отладке я вижу, что ViewController считывает переменную до того, как она будет установлена в TableView. Это приводит к значению nil (это необязательно) вместо того, что я ожидаю, но если я вернусь к своему tableView и снова выберу значение, оно будет установлено правильно.
Нужно ли мне как-то замедлить чтение в viewDidLoad() или я упустил какую-то основную часть перехода из tableView? Мне больше всего любопытно, почему значение равно нулю в первый раз, но работает во второй раз.
Переход от TableView:
// MARK: - Send information to the FBOSelector
// Send the fieldName the user selects
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let destination = segue.destinationViewController as! FBOSelectorViewController
let path = tableView.indexPathForSelectedRow
destination.fieldName = self.locations[(path?.row)!]
self.fetchFbos(self.locations[(path?.row)!])
}
Установка значений в TableView, которые я буду тянуть в viewController:
// This is failing because the values are read in FBOSelector before they are set here
// Using the fieldname selected pass the rest of the information to FBOSelector
func fetchFbos(fieldName: String) {
let ref = FIRDatabase.database().reference().child("Airport/\(fieldName)/FBOs/Signature")
ref.observeEventType(.Value, withBlock: { (snapshot) in
// print(snapshot)
if let dictionary = snapshot.value as? [String: AnyObject] {
RegistrationsManager.sharedManager.activeReservation.firfullName = dictionary["fullname"] as? String
// This will fire after the value in FBOSelector is read
print("DELAYED SETTER")
print(RegistrationsManager.sharedManager.activeReservation.firfullName)
}
})
}
В TableView я устанавливаю некоторые метки со значением, которое я установил в TableView, но они возвращают ноль (в первый раз, если я вернусь и выберу их снова, они отображаются правильно)
func firebaseInfo() {
self.fieldNameLabel.text = fieldName
self.locationLabel.text = RegistrationsManager.sharedManager.activeReservation.firfullName
//*** BUG IS HERE ***
// On first click locationLabel is nil
// print("DEBUG INFO")
print(RegistrationsManager.sharedManager.activeReservation.firfullName)
}
И затем я запускаю его в viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
fboCollectionView.delegate = self
fboCollectionView.dataSource = self
fboCollectionView.pagingEnabled = true
firebaseInfo()
}
Мне кажется, проблема со скоростью/параллелизмом? Я пытался получить значение в ViewController с помощью viewWillAppear (та же проблема) и с помощью sleep() (бесполезно, потому что он останавливает всю обработку). Может ли кто-нибудь указать мне правильное направление решения?