Опитвам се да предам някаква информация чрез преминаване от TableView към ViewController.
Чрез моето отстраняване на грешки мога да видя, че ViewController чете променливата, преди да бъде зададена в TableView. Това води до стойност нула (не е задължителна) вместо това, което очаквам, но ако се върна към моя 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() (не е добре, защото спира цялата обработка). Може ли някой да ме насочи в правилната посока на решение?