【问题标题】:Loading data back from NSUserDefaults从 NSUserDefaults 加载数据
【发布时间】:2015-02-01 08:48:19
【问题描述】:

在 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中了吗?

【问题讨论】:

  • 表格视图与将数据保存到用户默认值的控制器在同一个控制器中?

标签: ios uitableview swift nsuserdefaults


【解决方案1】:

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

This的答案描述得很好。

对于 swift 它是:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    这里假设 firstnamelastname 之前已保存。

    【讨论】:

      猜你喜欢
      • 2014-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多