我有一个字典,我想根据用户选择的选项进行操作。
在第一个View Controller中:
var filterDictionary = [String : [String]]()
包括从第二个视图控制器调用的函数
func onOptionsCLosed(_ filter : String, options : [String]) {
if options.count > 0 {
print(filter)
print(options)
filterDictionary[filter] = options
print(filterDictionary)
}
}
以及我用来测试结果的动作
@IBAction func submitFilter(_ sender: UIButton) {
print(filterDictionary)
}
在第二个View Controller中,我有一个动作来检查数组中的项目以确保那里有一些东西,然后将所需的值传递给第一个View Controller
@IBAction func submitOptions(_ sender: UIButton) {
let mainVC: FilterViewController = FilterViewController()
var selectedOptions: [String]? = []
if (optionCollectionView.indexPathsForSelectedItems != nil) {
for i in optionCollectionView.indexPathsForSelectedItems! {
let pos = i[1]
selectedOptions?.append(options[pos])
}
mainVC.onOptionsCLosed(filter, options: selectedOptions!)
} else {
print("ELSE")
// no items were selected prompt
}
_ = self.navigationController?.popViewController(animated: true)
}
我遇到的问题是,一旦将正确的参数传递给第一个视图控制器并且我能够将它们打印出来但是如果我单击按钮检查字典中包含的值它打印和空字典或者更确切地说它打印:[:]
答案 0 :(得分:1)
问题是您没有将值传递给第一个视图控制器。您实际上是在此行中创建第三个视图控制器:
let mainVC: FilterViewController = FilterViewController()
您应该使用self.presentingViewController
获取对现有第一个视图控制器的引用,或者在呈现之前在SecondViewController上手动设置引用。