我现在正在将值从 VC1 传递到 VC2
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.row == 0 {
FIRDatabase.database().reference().child("Menus/Day1").observeSingleEvent(of: .value, with: {(snap) in
if let snapDict = snap.value as? Dictionary <String, AnyObject>{
let date = snapDict["mealPic"] as! String
let OrderInfo = DataService.ds.REF_ORDER
let USERUID = FIRAuth.auth()!.currentUser!.uid
let userinfo = OrderInfo.child(date).child(USERUID).child("data")
self.valueToPass = date
}
})
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if(segue.identifier == "ToVari") {
var Vari = segue.destination as! Variation
Vari.passedValue = valueToPass
}
}
和我的 VC2 viewDidLoad:-
var passedValue : String!
override func viewDidLoad() {
super.viewDidLoad()
MEALDATE.text = passedValue
// Do any additional setup after loading the view.
}
它确实有效,但奇怪的是 VC2 中的“passedValue”一开始没有显示(我选择 VC1 中的单元格以执行到 VC2 的 Segue)
我不得不返回到 VC1,然后再次将单元格点击到 VC2,让“passedValue”显示它应该在那里的内容。
有人知道为什么会这样吗?
最佳答案
这可能是由于对 Firebase 的调用是异步的(并非 100% 确定)。此外,您正在从 Storyboard 中调用 segue,所以我建议如下:
- 从 Storyboard中删除 segue
- 在 Firebase 的回复中,添加以下内容:
self.performSegueWithIdentifier("ToVari", sender: self)
你应该没问题。
关于ios - 从 VC1 向 VC2 传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40239710/