EXC_BAD_ACCESS в библиотеке Secure-NSUserDefaults

0

Я пытаюсь использовать библиотеку 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

Целые объекты не являются объектами Objective-C. Вы не можете передать их методу, который принимает аргумент объекта.

Я не совсем понимаю, почему вы используете NSKeyedArchiver для этого. Если вам нужна NSMutableData, вы, вероятно, захотите создать его напрямую с помощью dataWithBytes:length:

  • 0
    На самом деле, целое число в конечном итоге преобразуется в NSNumber, прежде чем оно передается в метод hashObject (). Я попытался [NSMutableData dataWithBytes: длина объекта: malloc_size (object)], но все равно получаю нулевое возвращаемое значение, и объект также становится нулевым.
  • 0
    Неважно, я решил, что проще написать сам хэш, чем использовать сломанную библиотеку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню