2012-08-14 117 views
0

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

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

你检查使用'defaults'命令的价值? – mathk 2012-08-14 10:12:48

+0

你能告诉我如何使用该命令吗?它不响铃;) – Devos50 2012-08-14 10:15:25

+1

'人默认'应该帮助你。 – mathk 2012-08-14 10:17:23

回答

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 
+0

我试过使用%d和更改整数到NSInteger但两种解决方案都无法正常工作。感谢您的输入然而;) – Devos50 2012-08-14 10:19:16

+0

如果NSInteger - NSInteger不起作用,那么我会检查原始的@StorageUsed“是如何编码的。是否setInteger:forKey:并且您是否传递了一个NSInteger作为第一个参数? – 2012-08-14 10:22:31