Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 关闭和关闭VC后,我失去了主VC的所有出口连接_Ios_Swift_Xcode - Fatal编程技术网

Ios 关闭和关闭VC后,我失去了主VC的所有出口连接

Ios 关闭和关闭VC后,我失去了主VC的所有出口连接,ios,swift,xcode,Ios,Swift,Xcode,我的collectionView插座有问题。我在选项卡栏控制器中有几个VC,在主VC上有设置按钮,可以切换到设置VC。这显然是VC的设置对主VC有影响。但是,当我在取消设置VC后尝试重新加载collectionView的数据时,总是会出现错误“在隐式展开可选值时意外发现nil” 我试着用各种方法来改变VC(性能检查、演示(VC)和退出),结果总是一样的 缅因州 @IBAction func settingsTappedButton(_ sender: UIButton) { pe

我的collectionView插座有问题。我在选项卡栏控制器中有几个VC,在主VC上有设置按钮,可以切换到设置VC。这显然是VC的设置对主VC有影响。但是,当我在取消设置VC后尝试重新加载collectionView的数据时,总是会出现错误“在隐式展开可选值时意外发现nil”

我试着用各种方法来改变VC(性能检查、演示(VC)和退出),结果总是一样的

缅因州

    @IBAction func settingsTappedButton(_ sender: UIButton) {
    performSegue(withIdentifier: "goToSettings", sender: self)
    }
设置SVC

 @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)
    }
函数GetPostID
self.collectionView.reloadData()的mainVC中存在错误
GetPostID在viewDidLoad中也被调用,因此此插座在首次运行应用程序时起作用


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

您正在设置一个全新的
ViewController
,该查询与显示设置VC的查询不同

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

创建一个
设置查看控制器闸门

protocol SettingsViewControllerDelegate : class {
    func queryDidChange(_ vc: SettingsViewController, newValue: Bool)
}
并将
ViewController
与之一致:

extension ViewController : SettingsViewControllerDelegate {

    func queryDidChange(_ vc: SettingsViewController, newValue: Bool) {
        query = newValue
    }
}
设置视图控制器
中添加
委托
属性:

weak var delegate: SettingsViewControllerDelegate?
适当时调用委托方法:

@IBAction func ApplyFiltersTapped(_ sender: UIButton) {
    delegate?.queryDidChange(self, newValue: true)
    dismiss(animated: true, completion: nil)
}
prepareForSegue
中的
ViewController
中,将
self
设置为代理:

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

var query = false {
    didSet{
        GetPostsID(withQuery: query)
    }
}

您正在设置一个全新的
ViewController
查询,该查询与显示设置的查询不同

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

创建一个
设置查看控制器闸门

protocol SettingsViewControllerDelegate : class {
    func queryDidChange(_ vc: SettingsViewController, newValue: Bool)
}
并将
ViewController
与之一致:

extension ViewController : SettingsViewControllerDelegate {

    func queryDidChange(_ vc: SettingsViewController, newValue: Bool) {
        query = newValue
    }
}
设置视图控制器
中添加
委托
属性:

weak var delegate: SettingsViewControllerDelegate?
适当时调用委托方法:

@IBAction func ApplyFiltersTapped(_ sender: UIButton) {
    delegate?.queryDidChange(self, newValue: true)
    dismiss(animated: true, completion: nil)
}
prepareForSegue
中的
ViewController
中,将
self
设置为代理:

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

var query = false {
    didSet{
        GetPostsID(withQuery: query)
    }
}

您的代码中出现了错误,而不是出口。更好的方法是,请您显示viewWIllApper、ViewDidExample和ViewWillEnglishe的代码。您的代码中出现了一些错误,而不是出口。更好的方法是,您可以显示viewWIllApper、ViewDidDisplay和ViewWillEnglish的代码吗?