无法将 autoID 传递给新的 VC
Posted
技术标签:
【中文标题】无法将 autoID 传递给新的 VC【英文标题】:can't pass autoID to new VC 【发布时间】:2020-04-09 11:00:52 【问题描述】:我正在尝试将收到的 autoID 传递给另一个 ViewController... 我得到这样的 ID:
var passID: String = ""
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
jobsRef.queryOrdered(byChild: "userID").queryEqual(toValue: userID).observe(.childAdded, with: snapshot in
let currentPostID = snapshot.key
self.passID = currentPostID
print(self.passID) //-> Here the ID gets printed correctly
)
performSegue(withIdentifier: "toJobDetail", sender: indexPath)
我的 Segue 本身是这样的:
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if segue.identifier == "toJobDetail"
if let indexPath = sender as? IndexPath, let nextVC = segue.destination as? MyProfileJobDetailViewController
nextVC.jobDetails = MyProfileJobDetailViewController.JobDetails(IDPassed: self.passID)
我尝试像这样在 New VC 中打印 ID:
var jobDetails: JobDetails?
struct JobDetails
var IDPassed: String
override func viewDidLoad()
super.viewDidLoad()
print(jobDetails?.IDPassed) -> ID won't get printed correctly
但我现在的输出只有:
可选(())
我在传递 ID 时做错了吗? 因为在选择单元格时打印 ID 是可行的......
编辑:
我现在正在获取 ID,因为我只是在 Firebase 查询中调用 performSegue:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
jobsRef.queryOrdered(byChild: "userID").queryEqual(toValue: userID).observe(.childAdded, with: snapshot in
let currentPostID = snapshot.key
self.passID = currentPostID
print(self.passID)
self.performSegue(withIdentifier: "toJobDetail", sender: indexPath)
)
【问题讨论】:
你可以尝试删除结构并声明一个简单的 var 变量并赋值。我认为这将解决您的问题 【参考方案1】:您的查询是异步的并且需要一些时间,您应该确保在转到下一个屏幕之前获得所需的值。试试这个。。
jobsRef.queryOrdered(byChild: "userID").queryEqual(toValue: userID).observe(.childAdded, with: snapshot in
let currentPostID = snapshot.key
self.passID = currentPostID
print(self.passID) //-> Here the ID gets printed correctly
performSegue(withIdentifier: "toJobDetail", sender: indexPath)
)
编辑:
试试看……
var jobDetails: JobDetails?
didSet
print("set jobDetails to \(jobDetails)"
override func viewDidLoad()
super.viewDidLoad()
print("viewDidLoad: \(jobDetails?.IDPassed)")
【讨论】:
感谢您的回答 - 遗憾的是,现在我得到 Optional("") 作为输出...我可能需要在第二个 vc 上进行更改吗? 我已经进行了编辑,你可以在你的第二个视图控制器中尝试一下,并让我知道 hte 输出 试用了您编辑的解决方案并获得 viewDidLoad: Optional("") 和 Optional("") 作为输出 viewDidLoad 在您设置值之前被调用。因此视图正在加载 prepareForSegure 并且您正在打印出空值。在 prepareForSegue 的下一行中,您正在设置值。在属性上使用 viewWillAppear 或 didSet 可能会更好 好的,我做了一些全新的事情(检查我更新的代码) - 我得到了想要传递的 ID,但只在 Optional 后面,所以我的输出看起来像 Optional("ID") - 有没有办法删除 Optional 部分?以上是关于无法将 autoID 传递给新的 VC的主要内容,如果未能解决你的问题,请参考以下文章
如何将 DataTable.Select() 结果传递给新的 DataTable?