我有一个带有表视图的FirstVC,其中segue到另一个SecondVC,其中我传递了按下的单元格的名称。在SecondVC我有另一个tableview,我想填充数据。我有一个名为gettingUrls()的函数,它为我的表视图提取数据:
DataService.instance.mainRef.child("Folders").child("\(folderName)").observeSingleEvent(of: .value) { (snapshot: DataSnapshot) in...}
其中“folderName”是FirstVC的值。此功能实现为“拉动刷新功能”,效果很好。但是,当我尝试在viewDidLoad中运行该函数时,由于textName值为空,它会不断崩溃应用程序。我只是无法理解为什么此时segue的值在刷新函数中可用而不在viewDidLoad中。
以下是segue的代码:
let detailVC = self.storyboard?.instantiateViewController(withIdentifier: "DetailVC") as! DetailVC
self.navigationController?.pushViewController(detailVC, animated: true)
self.present(detailVC, animated: true, completion: nil)
detailVC.folderName = fileName
如何在viewDidLoad中运行该功能?
答案 0 :(得分:0)
在设置NSString *value = @"myvalue";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"myDictionary.myKey = %@",value];
PFQuery *query = [PFQuery queryWithClassName:@"ClassName" predicate:predicate];
[query includeKey:@"myDictionary"];
属性之前,您将展示DetailVC
的视图。视图已加载,但它还没有folderName
,因此程序崩溃。您应该在出示folderName
之前放置detailVC.folderName = fileName
行。
您也不需要第2行和第3行 - 要么呈现新的视图控制器,要么将其推送到导航堆栈,而不是两者。
答案 1 :(得分:0)
你应该编写带有segues的代码来推送viewControllers,就像不跟navigationController
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "Verification") {
let vc = segue.destination as! MyViewController
vc.delegate = self
vc.property = value
}
}
答案 2 :(得分:0)
所以在@haarismuneer的帮助下,在初始化SecondVC之前传递变量就足够了:
detailVC.folderName = fileName
self.navigationController?.pushViewController(detailVC, animated: true)