我有一个快速的表格 View 。每个单元格都有一个带有不同文本的标签。当选择一个单元格时,它将文本传递到另一个 View Controller 上的标签。我可以使用一个按钮(保存数据)保存此数据,并使用另一个按钮(加载数据)加载保存的数据。
我的问题是我理想情况下不希望使用按钮,而是在 View 加载时自动加载数据。但是,当我将 NSUSerDefaults 代码放入 viewDidLoad () 中时,它会保存数据,但我无法再更改选择,即它会永久加载第一个选择。我在下面发布了目标 ViewController 和 TableViewController 的代码。
View Controller
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
}
}
}
最佳答案
如果您想将选定的数据保存到 NSUSerDefaults 您应该像这样在 didSelectRowAtIndexPath 中编写保存代码
如果你有在 NSUserDefaults 中保存数据的功能
save(DataArray[indexPath.row])
然后它将被保存,但我认为如果您的数据仅在应用程序运行时使用,我认为最好的选择是静态实例。
关于swift - 使用 NSUSerDefaults 保存 Swift TableView 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35847351/