我正在尝试使用此处的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所以我不太明白这里发生了什么。
答案 0 :(得分:0)
整数不是Objective-C中的对象。您不能将它们传递给带有对象参数的方法。
我不清楚你为什么要使用NSKeyedArchiver
。如果您需要NSMutableData
,则可能需要使用dataWithBytes:length: