Я пытаюсь сохранить размер файла в байтах как NSNumber. Я читаю размер загрузки файла из NSURLResponse, и это дает мне длинное длинное значение, и затем я создаю объект NSNumber из этого значения и сохраняю его. Когда я вернусь к этому значению позже, он возвращается со всеми более высокими байтами, установленными как FFFFFFFF.Objective C - NSNumber сохранение и получение longLongValue всегда префиксов с 0xFFFFFFFF
Например, я прочитал размер как 2196772870 байт (0x82f01806), а затем сохранил его в NSNumber. Когда я верну его, я получаю -2098194426 байт (0xffffffff82f01806). Я попытался сделать двоичный файл AND с 0x00000000FFFFFFFF перед сохранением значения в NSNumber, но он все равно возвращается как отрицательный. Код ниже:
long long bytesTotal = response.expectedContentLength;
NSLog(@"bytesTotal = %llx",bytesTotal);
[downloadInfo setFileTotalSize:[NSNumber numberWithInt:bytesTotal]];
//[downloadInfo setFileTotalSize:[NSNumber numberWithLongLong:bytesTotal]];
long long fileTotalSize = [[downloadInfo fileTotalSize] longLongValue];
NSLog(@"fileTotalSize = %llx",fileTotalSize);
Выходные:
bytesTotal = 82f01806
fileTotalSize = ffffffff82f01806
Любые предложения?
Редактировать: Полностью забыл установщик для объекта downloadInfo.
Почему вы маскируете 'bytesTotal' при создании' size'? Что вы делаете с 'size'? Откуда появляется 'downloadInfo'? – rmaddy
@maddy Он делает то же самое, маскирую ли я его или нет. downloadInfo - это просто объект, который сохраняет размер файла, чтобы я мог отображать общий размер в представлении. – rplankenhorn
В коде, который вы отправили, есть большая дыра. Как вы попадаете из переменной 'size' (которую вы не регистрируете) в переменную' downloadInfo'? Мне кажется, что испорченное значение происходит где-то в этом недостающем наборе деталей. – rmaddy