【问题标题】:NSUserDefault BoolKey Not Saved Getting Reset After Closed AppNSUserDefault BoolKey 未保存在关闭应用程序后重置
【发布时间】:2015-06-23 21:07:06
【问题描述】:

我使用以下代码启动我的应用程序,但在某些设备中未保存 nsuserdefaults。当我从主页按钮终止应用程序并再次打开时,它开始时好像未保存 nsuserdefaults!

  NSUserDefaults *pref=[NSUserDefaults standardUserDefaults];
if([pref boolForKey:@"islogin"])
{


    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    UITabBarController * tabbar = [storyboard instantiateViewControllerWithIdentifier:@"tabbar"];


    tabbar.selectedIndex = 2;
    self.window.rootViewController = tabbar;
    [self.window makeKeyAndVisible];
}else{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    self.window.rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"register"];
    [self.window makeKeyAndVisible];

}

从评论中移出的代码:

[pref setObject:[response valueForKey:@"user_id"] forKey:@"user_id"];
[self performSegueWithIdentifier:@"code" sender:self];
[pref setBool:YES forKey:@"islogin"];

我没有添加同步,因为在我的设备中它运行良好,现在我添加同步,我正在等待结果。

【问题讨论】:

  • 请发布您用来保存用户默认值的代码,这就是您的问题所在。
  • [pref setObject:[response valueForKey:@"user_id"] forKey:@"user_id"]; [self performSegueWithIdentifier:@"code" sender:self]; [pref setBool:YES forKey:@"islogin"];我没有添加同步,因为在我的设备中它运行良好,现在我添加同步,我正在等待结果..
  • 将代码放入您的问题中,而不是 cmets。
  • NSLog 设置前、设置后和检索后。

标签: ios objective-c


【解决方案1】:

您需要确保保存 NSUserDefaults

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:YES forKey:@"islogin"];
[defaults synchronize];

【讨论】:

  • 只有在自动保存用户默认值之前杀死应用程序时才需要这样做。
  • 应用中的值始终是最新的,同步只适用于保存到磁盘。来自 Apple 文档:“'将对持久域的任何修改写入磁盘,并将所有未修改的持久域更新到磁盘上的内容。”和“因为此方法会定期自动调用,所以仅当您无法等待自动同步(例如,如果您的应用程序即将退出)或您想将用户默认更新为磁盘上的内容时才使用此方法即使您没有进行任何更改。”
猜你喜欢
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
  • 2011-10-04
相关资源
最近更新 更多