从 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
之前已经保存了
在 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
之前已经保存了