我遇到一个带有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
...
如您所见,使用的存储空间不会减少,而大小不是零。
任何人都可以解释为什么会这样吗?
答案 0 :(得分: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