2017-07-20 55 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) 

} 

在第二個視圖控制器,我有一個動作,檢查數組中的項目確保有什麼那裏,然後通過所需要的值,以第一視圖控制器

@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() 

你應該抓住用self.presentingViewController現有的第一個視圖控制器或呈現之前SecondViewController手動設定參考參考。