从 NSUserDefaults 加载数据

Loading data back from NSUserDefaults

在 ViewController3 中,用户可以通过单击按钮将一些文本保存到 NSUserDefaults(以便在其他地方使用)。在同一个 ViewController 中还有一个 tableView(用于从 NSUserDefaults 中删除特定项目)

所以我必须加载数据:

override func viewDidLoad() {
    super.viewDidLoad()

    var exercisescopy = NSMutableArray(array: exercises)

    var userDefaults:NSUserDefaults = NSUserDefaults.standardUserDefaults()

    var exercisesListFromUserDefaults:NSMutableArray? = userDefaults.objectForKey("exercisesList") as? NSMutableArray

    if ((exercisesListFromUserDefaults) != nil){
        exercises = exercisesListFromUserDefaults!
    }
    self.tableView.reloadData()

}

这样当你到达第三个时数据就在那里 ViewController 但是如何在将新元素保存到 NSUserDefaults 后立即取回数据?以便它现在显示在tableView中?

您可以使用NSNotificationCenter观察NSUserDefaults的变化。

This 答案描述得很好。

对于swift是:

NSNotificationCenter.defaultCenter().addObserver(self, "reloadMyData:", NSUserDefaultsDidChangeNotification, nil)

其中 reloadMyData: 是触发 table 重新加载的函数。

不要忘记在 deinit 中剥离观察者,如:

deinit {
    NSNotificationCenter.defaultCenter().removeObserver(self)
}

你真的不想这样做,使用 NSUserDefault 传递数据NSNotification 正如@Burton 所建议的那样,center 很酷。如果你的数据真的很大,你可以使用 CoreData。如果你真的想这样做,你打算这样做......

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  
NSString *firstName = [defaults objectForKey:@"firstName"];
NSString *lastName = [defaults objectForKey:@"lastname"];

这里假设firstname&lastname之前已经保存了