2017-07-20 13 views
1

ユーザーが選択したオプションに応じて操作したい辞書があります。最初のビューコントローラでSwiftで辞書の値を更新できません

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) 

} 

2番目の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

新しい 'FilterViewController'をインスタンス化しています。これはあなたが戻ってくる 'FilterViewController'ではありません。呼び出し側のviewControllerにデータを戻すために、委譲を使用する必要があります。 – vacawama

+0

MakeAppPieの答えを参照してください:https://stackoverflow.com/q/24099230/1630618 – vacawama

+0

リンクのためのおかげで@vacawama、それは助け! –

答えて

1

問題は、最初のビューコントローラに値を渡していないということです。あなたが実際にこの行の第三ビューコントローラを作成している:

let mainVC: FilterViewController = FilterViewController() 

あなたが提示する前にSecondViewControllerに手動で参照を設定することにより、self.presentingViewControllerかを使用して、既存の最初のビューコントローラへの参照をつかむ必要があります。

関連する問題