swift - 使用 NSUSerDefaults 保存 Swift TableView 数据

标签 swift tableview nsuserdefaults

我有一个快速的表格 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/

相关文章:

json - swift tableview显示json数据很慢

ios - UIStepper - 从 NSUserDefaults 设置值

ios - 如何在 ios 中使用 Swift 将 tableViewCell 的数据共享到下一个 viewController 而不使用 Storyboard

JavaFX 2.1 TableView 刷新项

ios - 用户默认值不在 swift 3 中保存字典内容

ios - NSUserdefaults 在 iOS 应用程序中无法正常工作

Swift 3 Equatable Struct 可选函数

swift - 我可以在 C 枚举上使用 NS_SWIFT_NAME 或 NS_REFINED_FOR_SWIFT 将全局函数映射到 Swift 属性吗?

ios - 使用 Sinch 的即时消息推送通知未在 iOS 上提供

Swift:本地通知提前 1 小时安排