NSUserDefaults改变每个segue

时间:2016-10-29 01:41:06

标签: swift swift2 nsuserdefaults

抱歉新手问题,但我真的被卡住了。

我在应用中有一个UIViewController和4个tableviews。当我点击UIViewcontroller上的一个按钮时,它会转到名为“Beach”的UITableviewController。当用户单击表格的单元格时,它会回到UIViewController,并将所选单元格标题显示为按钮标题。我遇到的问题是当我点击一个nother按钮到tableview然后点击单元格时,之前的按钮标题会回到之前的标题。

我在表视图控制器中准备了segue函数,这会将选定的表标题(名为:Titleoftable)返回给主VC,即字符串。

我目前正在进行的方式是在下面创建一个NSUserDefault,但问题仍然保持不变 - 每次点击另一个表V时值都会变为“” -

let path = tableView.indexPathForSelectedRow

            let cell = tableView.cellForRowAtIndexPath(path!)

            let persistenceStoreKey = "MyStringKey"
            let stringToStore = "\((cell?.textLabel?.text!)!)"

            // Store data
            NSUserDefaults.standardUserDefaults().setObject(stringToStore, forKey: persistenceStoreKey)
            NSUserDefaults.standardUserDefaults().synchronize()

            // Get data
            let myStringt = NSUserDefaults.standardUserDefaults().stringForKey(persistenceStoreKey)


            destination.textOfBeach = (myStringt)!
            destination.isBeachSelected = true


    }

我多年来一直坚持这个问题!请帮助!!

PS-我正在使用swift-2和Xcode7

1 个答案:

答案 0 :(得分:0)

确保在单击tableview的单元格后没有推送新的ViewController。它给我的印象是它可能是这种情况,因为你只看到你按下的最后一个单元格的标题。确保你实际弹出tableview的控制器而不是推新的。

如果您想继续使用NSUserDefaults,可以直接调用

navigationController?.popViewController(animated: true)
在您的cellSelection函数中

,并在主ViewController的viewWillAppear中读取默认值。

override func viewWillAppear(_ animated: Bool) {
    let userDefault = NSUserDefaults.standard()
    if let beachSelection = userDefault.string(forKey: "BeachControllerSelection") {
        textOfBeach = beachSelection
        isBeachSelected = true
    }
    //same for the rest of the other table view's selections
}