使用来自segue的参数调用函数

时间:2017-11-21 22:19:26

标签: ios swift uitableview firebase segue

我有一个带有表视图的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中运行该功能?

3 个答案:

答案 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)