从NSUserDefaults加载数据

时间:2015-02-01 08:48:20

标签: ios uitableview swift 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中?

2 个答案:

答案 0 :(得分:0)

您可以使用NSNotificationCenter观察NSUserDefaults中的更改。

This回答很好地描述了它。

对于swift来说:

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

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

请勿忘记在deinit中剥离观察者,如下所示:

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

答案 1 :(得分:0)

你真的不想这样做,使用NSUserDefault传递数据。正如@Burton建议的那样,NSNotification中心很酷。如果您的数据非常大,可以使用CoreData。如果你真的想这样做,你打算在这里是如何......

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

这里假设firstname& lastname得到了很好的保存。