【问题标题】:Not all NSUserDefaults are restored on app relaunch并非所有 NSUserDefaults 都会在应用重新启动时恢复
【发布时间】:2017-04-26 10:14:09
【问题描述】:

我将 2 个自定义列表转换​​为 json 字符串并将其存储在 NSUserDefaults 中。像这样:-

NSUserDefaults.StandardUserDefaults.SetString(JsonConvert.SerializeObject(stationList.Take(50)), "StationList1");
NSUserDefaults.StandardUserDefaults.SetString(JsonConvert.SerializeObject(stationList.Skip(50).Take(50)), "StationList2");  

如果我尝试在保存它们后立即检索它们,如下所示,我会得到保存的值:-

savedStationList1 = NSUserDefaults.StandardUserDefaults.StringForKey("StationList1");
  savedStationList2 = NSUserDefaults.StandardUserDefaults.StringForKey("StationList2");  

但问题是,如果我重新启动应用程序,并尝试在代码的另一部分获取上述值,我只能得到以下值:-

savedStationList2 = NSUserDefaults.StandardUserDefaults.StringForKey("StationList2");  

并且下面的值始终为空:-

 savedStationList1 = NSUserDefaults.StandardUserDefaults.StringForKey("StationList1");

我不会在应用程序的任何地方覆盖这些值。有没有办法解决这个问题?

感谢任何帮助

【问题讨论】:

    标签: ios xamarin xamarin.ios nsuserdefaults


    【解决方案1】:

    虽然 iOS 系统本身会存储通过“userdefaults”添加的数据,但它可能不会立即执行此操作。我建议添加以下行:

    NSUserDefaults.StandardUserDefaults.Synchronise();
    

    在您将数据存储到标准用户默认设置后,运行同步并测试您是否可以提取数据,您应该会发现这现在可以正常工作了。

    【讨论】:

    • 这仅适用于第一次运行。重新运行应用程序时它不会亮起。我开始认为库的绑定有问题。我假设 userdefaults 的目的是存储的任何设置都将在下一次午餐时保留。不是这样吗?
    • @Woj 它绝对应该为下次运行存储它,我过去没有遇到任何问题。每次将数据放入 NSUserDefaults 字典时都应该调用 synchronise(),但不需要调用 synchronize 来检索数据。如果您遇到问题,则可能是您的代码有问题。
    猜你喜欢
    • 1970-01-01
    • 2017-02-23
    • 2019-03-15
    • 2017-07-22
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多