我在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 :(得分:0)
如果您想将所选数据保存到NSUSerDefaults您应该在didSelectRowAtIndexPath中编写保存代码,如下所示
如果您具有在NSUserDefaults中保存数据的功能
save(DataArray[indexPath.row])
然后它将被保存,但我认为如果您的数据仅在应用程序运行时使用,我认为使用的最佳选择是静态实例。