【问题标题】:NSUserDefaults not saving integerNSUserDefaults 不保存整数
【发布时间】:2015-09-24 02:40:09
【问题描述】:

我在保存到现有密钥时遇到了一些问题

//This was previously set and contains this value 1436544831921
NSInteger timestamp = [[NSUserDefualts standardUserDefualts] integerForKey:aKey];

NSInteger newValue = [self doSomethingWithOldValue:timestamp] //returns 1436631948002

[[NSUserDefualts standardUserDefualts] setInteger:newValue forKey:aKey];
[[NSUserDefualts standardUserDefualts] synchronize];

这个实现有问题吗?它不是保存,而是保留以前保存的值。

【问题讨论】:

  • 你意识到这个值比一个 32 位整数可以容纳的大——它需要一个 64 位整数来容纳它。尝试设置,然后读取,然后设置,然后读取“100”之类的值。
  • @DavidH 我试过这样做,但它甚至没有将其设置为“100”,它保留了旧值。
  • 尝试查找可能在您的代码中的某处您也更改了该键。例如在应用启动时/
  • @Cy-4AH 谢谢,关键是常数。这是唯一设置值的地方。在第二次到达这一点之后,它不再在此键下保存任何值。
  • @CRD 添加到关注列表

标签: ios objective-c iphone macos nsuserdefaults


【解决方案1】:

尝试首先像这样设置您的NSUserDefaults

NSUserDefaults *userPrefs = [NSUserDefaults standardUserDefaults];

您也可以尝试像这样使用 NSString:

NSInteger newValue = [self doSomethingWithOldValue:timestamp];
NSString* newValueString = [NSString stringWithFormat:@"%i", newValue];

[userPrefs setObject:newValueString forKey:aKey];

还要确保您的aKey 设置正确

【讨论】:

  • 我不知道问题出在哪里,但使用字符串确实解决了这个问题,我尝试了所有东西,整数、值、nsnumber 作为对象,这是唯一真正有效的方法。谢谢!
  • 很高兴听到这个消息:)
  • @trick14 我不太确定,但我在类参考中读到setInteger:forKey: 调用setObject:forKey: 作为其实现的一部分。这让我尝试使用setObject:forKey:
  • @TomWayne 但是您是否有任何线索 NSUserdefaults 是否以及为什么不解析整数?我在保存具有返回为 nil(或 0)的整数属性的实例时遇到同样的问题。我将使用字符串快速修复,但它很讨厌,我不喜欢不知道为什么:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多