【问题标题】:NSUserDefaults Not Saving Data Objective CNSUserDefaults 不保存数据目标 C
【发布时间】:2016-04-01 21:54:19
【问题描述】:

我正在创建这个包含用户分数的应用程序。当他们退出应用程序时,将保存分数。我通过 NSUserDefaults 做到这一点,效果很好。问题是用户得分可以在其他视图中被操纵。例如,他们可以使用他们的分数来购买东西等。为此,我将分数保存在 NSUserDefaults 中,然后在下一个视图中检索保存的数据。问题是由于某种原因没有保存数据。我有一个每秒运行的计时器来保存分数,当我单击按钮转到下一个视图时,我使用 IBAction 保存它。这是我用来初始化变量的:

score = [[[NSUserDefaults standardUserDefaults] objectForKey:@"score"] longLongValue];

这是为了保存它:

[[NSUserDefaults standardUserDefaults] setObject:@(score) forKey:@"score"];

我使用的是 long long 变量,这就是为什么我将它作为对象而不是整数的原因。我不明白为什么在我改变观点时价值观会发生变化。每当我操纵分数值时,我都会保存它。在每个视图的顶部,我都在声明它。我意识到其他人也发布了类似的问题,我都看过了。这些回答并没有解决我的问题,这就是我在这里问的原因。同步

[[NSUserDefaults standardUserDefaults] synchronize];

对我也没有用。

【问题讨论】:

标签: ios objective-c nsuserdefaults


【解决方案1】:

您唯一缺少的是,synchronize 您没有告诉NSUserDefault 将数据写入磁盘。

// *** Get your score value ***
score = [[[NSUserDefaults standardUserDefaults] objectForKey:@"score"] longLongValue];

// *** manipulate it if needed ***
score+=100;

// *** save it back to `NSUserDefaults` ***
[[NSUserDefaults standardUserDefaults] setObject:@(score) forKey:@"score"];

// *** Synchronize your updates to `NSUserDefaults` by calling it, it immediately write data to disc ***
[[NSUserDefaults standardUserDefaults] synchronize];

有关NSUserDefaults的更多详细信息,请阅读Apple Documentation

【讨论】:

  • 输入您的代码,以便人们了解它为什么不起作用。
  • @DipenPanchasara 与 iOS 9.3.1 有同样的问题,似乎有些东西坏了......
  • @Idan 输入我的示例代码并检查它,如果它有效,请验证您的代码。
【解决方案2】:

使用这个。这将保存值

[[NSUserDefaults standardUserDefaults] setObject:@(score) forKey:@"score"];

[[NSUserDefaults standardUserDefaults] synchronize];

【讨论】:

  • 得分是 Int 还是字符串?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
  • 2013-11-13
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
相关资源
最近更新 更多