在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中?
答案 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
得到了很好的保存。