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

%i の代わりに %d を試しましたか?

また、integerForKey: は int ではなく NSInteger を返します。違いは
次のように定義されます

#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 に答える