我试图将文件大小以字节为单位存储为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对象的setter。
为什么在创建size时屏蔽'bytesTotal'?你如何处理'size'? 'downloadInfo'从哪里来? – rmaddy
@maddy它是否做同样的事情,无论我是否掩盖它。 downloadInfo只是一个存储文件大小的对象,以便我可以在视图中显示总大小。 – rplankenhorn
您发布的代码有一个大的漏洞。你如何从'size'变量(你不记录)到'downloadInfo'变量?在我看来,这种混乱的价值发生在那些缺少细节的地方。 – rmaddy