Я пытаюсь использовать библиотеку 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, поэтому я не совсем понимаю, что здесь происходит.
Целые объекты не являются объектами Objective-C. Вы не можете передать их методу, который принимает аргумент объекта.
Я не совсем понимаю, почему вы используете NSKeyedArchiver
для этого. Если вам нужна NSMutableData
, вы, вероятно, захотите создать его напрямую с помощью dataWithBytes:length: