关闭并关闭VC之后,我失去了主VC的所有插座连接

时间:2019-04-12 10:49:19

标签: ios swift xcode

我的collectionView插座有问题。我在标签栏控制器中没有几个VC,在主VC上我有带有设置VC的设置按钮。显然,这是设置VC对主VC的影响。但是,总是在我取消设置VC后尝试重新加载collectionView的数据时,出现错误“意外地发现nil,同时隐式展开一个Optional值”

我尝试了各种方法来更改VC(performSegue,present(VC)和dismiss)始终保持相同的结果

mainVC

    @IBAction func settingsTappedButton(_ sender: UIButton) {
    performSegue(withIdentifier: "goToSettings", sender: self)
    }
    var query = false {
        didSet{
            GetPostsID(withQuery: !oldValue)
        }
    }

settingsVC

 @IBAction func ApplyFiltersTapped(_ sender: UIButton) {
        let displayVC : ViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController") as! ViewController
        displayVC.query = true
        dismiss(animated: true, completion: nil)
    }

mainVC中的函数GetPostID self.collectionView.reloadData()中存在错误 在viewDidLoad中也调用了GetPostID,因此此出口可在首次运行的应用程序上使用

我只是希望在设置VC中更改设置后重新加载所有数据

1 个答案:

答案 0 :(得分:0)

您正在设置对全新ViewController的查询,该查询与提供VC的查询不同。

基本上,您需要“向后”传递数据。一种方法是使用委托模式。

创建一个SettingsViewControllerDelegate

protocol SettingsViewControllerDelegate : class {
    func queryDidChange(_ vc: SettingsViewController, newValue: Bool)
}

并使其符合ViewController

extension ViewController : SettingsViewControllerDelegate {

    func queryDidChange(_ vc: SettingsViewController, newValue: Bool) {
        query = newValue
    }
}

delegate中添加一个SettingsViewController属性:

weak var delegate: SettingsViewControllerDelegate?

在适当的时候调用委托方法:

@IBAction func ApplyFiltersTapped(_ sender: UIButton) {
    delegate?.queryDidChange(self, newValue: true)
    dismiss(animated: true, completion: nil)
}

然后在prepareForSegue的{​​{1}}中,将ViewController设置为委托:

self

此外,设置属性观察器的方式可能会引起问题。您应该使用新值而不是if let vc = segue.destination as? SettingsViewController { vc.delegate = self } ,因为即使新值与旧值相同,也会调用属性观察器。

!oldValue