NSNumber хранится в NSUserDefaults

Произошла что-то странное.

Я сохранил NSNumber с длинным длинным значением без знака в NSUserDefaults. Когда я его извлекаю, значение просто изменилось. Похоже, что система считает, что число является длинным длинным, а не беззнаковым длинным.

Что еще хуже, , когда я сравниваю число, полученное из UserDefaults, с исходным числом, результат NotEqual !

что не так с кодом? Спасибо!

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
6
задан Swordsfrog 6 October 2011 в 05:41
поделиться