2016-03-07 116 views
0

我有一个swift的tableview。每个单元都有一个带有不同文本的标签。当选中一个单元格时,它将文本传递给另一个视图控制器上的标签。我可以使用按钮(Save Data)保存这些数据,并使用另一个按钮(Load Data)加载保存的数据。使用NSUSerDefaults保存Swift TableView数据

我的问题是我理想上不想使用按钮,但有数据加载视图时自动加载数据。但是,当我将NSUSerDefaults代码放在viewDidLoad()中时,它将保存数据,但我不再能够更改选择,即永久加载第一个选择。我已经发布了我的代码下面的目标ViewController和TableViewController。

的ViewController

import UIKit 

class DetailViewController: UIViewController { 

    @IBOutlet weak var detailLabel: UILabel! 

    var passedValue: String? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     detailLabel.text = passedValue 
    } 

    @IBAction func saveDataClicked(sender: AnyObject) { 
     var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 

     defaults.setObject(self.detailLabel.text, forKey: "optionValue") 
    } 

    @IBAction func loadDataClicked(sender: AnyObject) { 
     var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 

     if let optionValueIsNotNill = defaults.objectForKey("optionValue") as? String { 
      self.detailLabel.text = defaults.objectForKey("optionValue") as! String 
     } 
    } 
} 

TableViewController

import UIKit 

class TableViewController: UITableViewController { 

    var valueToPass:String! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 3 
    } 

    override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 

     // Get Cell Label 
     let indexPath = tableView.indexPathForSelectedRow; 
     let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!; 

     valueToPass = currentCell.textLabel!.text 
     performSegueWithIdentifier("showDetailView", sender: self) 

    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){ 
     if segue.identifier == "showDetailView" { 

      // initialize new view controller and cast it as your view controller 
      var viewController = segue.destinationViewController as! DetailViewController 
      // your new view controller should have property that will store passed value 
      viewController.passedValue = valueToPass 

     } 
    } 
} 

回答

0
如果要保存所选资料与NSUserDefaults的你应该写你的储蓄代码didSelectRowAtIndexPath方法这样

,如果你有

一个将数据保存在NSUserDefa中的函数ULTS

save(DataArray[indexPath.row]) 

那么它将被保存下来,但我想,如果当应用程序只运行使用你的数据,我想用最好的选择是静态实例。