NSUserDefaults无法保存整数

5

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

//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];

这个实现有问题吗?它没有保存新的值,而是持久化了之前保存的值。

1
你意识到这个值比32位整数能够容纳的要大,需要使用64位整数才能存储。尝试设置、读取、再设置、再读取一个像“100”这样的值。 - David H
@DavidH 我尝试过这样做,但它甚至没有将其设置为“100”,它仍然保持旧值。 - quant24
1
尝试查找一下你的代码中是否也更改了该键。例如,在应用程序启动时。 - Cy-4AH
@Cy-4AH 谢谢,这个键是一个常量。而且这是唯一设置该值的地方。第二次到达这个点后,它不会再次在此键下保存任何值。 - quant24
@CRD 已添加到观察列表。 - quant24
使用对象NSNumber代替... - 0yeoj
1个回答

4

首先,尝试按照以下方式设置您的NSUserDefaults

NSUserDefaults *userPrefs = [NSUserDefaults standardUserDefaults];

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

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

[userPrefs setObject:newValueString forKey:aKey];

同时确保您的 aKey 设置正确。


3
我不知道问题出在哪里,但改用字符串确定解决了这个问题。我尝试了一切:整数、值、NSNumber对象,而只有这个方法真正奏效。谢谢! - quant24
1
很高兴听到这个好消息 :) - TomWayne
1
@trick14,我不是很确定这一点,但我在类参考中读到 setInteger:forKey: 会在其实现过程中调用 setObject:forKey:。这让我尝试使用 setObject:forKey: - TomWayne
@TomWayne 但你是否知道为什么NSUserdefaults无法解析整数?我也遇到了同样的问题,保存具有整数属性的实例时返回nil(或0)。我将使用string-quickfix,但它很糟糕,而且我不知道原因:P - DevilInDisguise

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接