Secure-NSUserDefaults库中的EXC_BAD_ACCESS

时间:2014-09-10 23:02:36

标签: c++ ios objective-c

我正在尝试使用此处的Secure-NSUserDefaults库:https://github.com/matthiasplappert/Secure-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,并破坏对象的地址(变为0xffffffcc)。请注意,之前我从未真正使用过NSKeyedArchiver所以我不太明白这里发生了什么。

1 个答案:

答案 0 :(得分:0)

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

我不清楚你为什么要使用NSKeyedArchiver。如果您需要NSMutableData,则可能需要使用dataWithBytes:length:

直接创建一个{{1}}