0

我在使用 NSUserDefaults 的整数时遇到了一个奇怪的问题。在我正在开发的应用程序中,可以删除一些照片。当用户删除它们时,NSUserDefaults 中的一个整数会减少(命名为 StorageUsed)。这是用户删除照片时的代码:

int size = [[json objectForKey:@"size"] intValue];
NSLog(@"photo size: %i",size);
int storageUsed = [[NSUserDefaults standardUserDefaults] integerForKey:@"StorageUsed"];
storageUsed = storageUsed - size;
NSLog(@"storage used: %i",storageUsed);
[[NSUserDefaults standardUserDefaults] setInteger:storageUsed forKey:@"StorageUsed"];
[[NSUserDefaults standardUserDefaults] synchronize];

这是输出:

2012-08-14 12:00:18.285 My Albums[32875:707] photo size: 116769
2012-08-14 12:00:18.293 My Albums[32875:707] storage used: 952516
2012-08-14 12:00:18.514 My Albums[32875:707] photo size: 117333
2012-08-14 12:00:18.516 My Albums[32875:707] storage used: 952516
2012-08-14 12:00:18.729 My Albums[32875:707] photo size: 120303
2012-08-14 12:00:18.731 My Albums[32875:707] storage used: 952516
2012-08-14 12:00:18.991 My Albums[32875:707] photo size: 137845
2012-08-14 12:00:18.993 My Albums[32875:707] storage used: 952516
...

如您所见,使用的存储量没有减少,而大小不为零。

谁能解释为什么会这样?

4

1 回答 1

0

你试过用 %d 代替 %i 吗?

此外,integerForKey: 返回一个 NSInteger,而不是一个 int。差异
定义如下

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
于 2012-08-14T10:16:19.447 回答