刚才发生了一些奇怪的事情。
我在NSUserDefaults中存储了一个NSNumber,其值为unsigned long long。当我检索它时,值就改变了。系统似乎认为这个数字是long long而不是unsigned long long。
更糟糕的是,当我将从UserDefaults检索到的数字与原始数字进行比较时,结果是不相等!
代码有什么问题吗?谢谢!
static NSString * const NumberKey = @"MyNumber";
unsigned long long value = 15908045869032883218ULL;
if ([[NSUserDefaults standardUserDefaults] objectForKey:NumberKey] == nil) {
NSNumber *number = [NSNumber numberWithUnsignedLongLong:value];
[[NSUserDefaults standardUserDefaults] setObject:number forKey:NumberKey];
NSLog(@"Original Number:%@", number); // 15908045869032883218, right
}
NSNumber *number = [[NSUserDefaults standardUserDefaults] objectForKey:NumberKey];
NSLog(@"Current Number:%@", number); // -2538698204676668398, weird
NSLog(@"Current Value:%llu", [number unsignedLongLongValue]); // 15908045869032883218, right
NSLog(@"%d", [number isEqualToNumber:[NSNumber numberWithUnsignedLongLong:value]]); // 0
NSLog(@"%d", [number unsignedLongLongValue] == value); // 1