Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 安全NSUserDefaults库中的EXC_错误访问_C++_Ios_Objective C - Fatal编程技术网

C++ 安全NSUserDefaults库中的EXC_错误访问

C++ 安全NSUserDefaults库中的EXC_错误访问,c++,ios,objective-c,C++,Ios,Objective C,我正在尝试使用此处找到的安全NSUserDefaults库: 尝试使用库对整数进行哈希运算时,此函数崩溃: - (NSString *)_hashObject:(id)object { if (_secretData == nil) { // Use if statement in case asserts are disabled NSAssert(NO, @"Provide a secret before using any secure w

我正在尝试使用此处找到的安全NSUserDefaults库:

尝试使用库对整数进行哈希运算时,此函数崩溃:

- (NSString *)_hashObject:(id)object
{
    if (_secretData == nil) 
    {
        // Use if statement in case asserts are disabled
        NSAssert(NO, @"Provide a secret before using any secure writing or reading methods!");
        return nil;
    }

    // Copy object to make sure it is immutable (thanks Stephen)
    object = [object copy];

    // Archive & hash
    NSMutableData *archivedData = [[NSKeyedArchiver archivedDataWithRootObject:object] mutableCopy];
    [archivedData appendData:_secretData];

    if (_deviceIdentifierData != nil)
        [archivedData appendData:_deviceIdentifierData];

    NSString *hash = [self _hashData:archivedData];

    return hash;
}
单步执行调试器后,这一行似乎是罪魁祸首:

NSMutableData *archivedData = [[NSKeyedArchiver archivedDataWithRootObject:object] mutableCopy];

此方法返回nil,并损坏对象的地址(变成0xFFFFCC)。请注意,我以前从未实际使用过NSKeyedArchiver,因此我不太了解这里的情况。

整数在Objective-C中不是对象。您不能将它们传递给接受对象参数的方法


我不太清楚为什么要使用
NSKeyedArchiver
。如果您需要一个
NSMutableData
,您可能希望直接使用

创建一个。实际上,在将整数传递到hashObject()方法之前,它最终会转换为一个NSNumber。我尝试了[NSMutableData dataWithBytes:object length:malloc_size(object)],但仍然得到了一个nil返回值,并且object也变成了nil。不过,我决定自己编写散列比使用一个坏库更简单。