Ios 关闭和关闭VC后,我失去了主VC的所有出口连接
我的collectionView插座有问题。我在选项卡栏控制器中有几个VC,在主VC上有设置按钮,可以切换到设置VC。这显然是VC的设置对主VC有影响。但是,当我在取消设置VC后尝试重新加载collectionView的数据时,总是会出现错误“在隐式展开可选值时意外发现nil” 我试着用各种方法来改变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
@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)
}
函数GetPostIDself.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的代码吗?