Преобразовать NSDecimalNumber в NSString - PullRequest
0 голосов
/ 14 декабря 2011

Я использую этот код, чтобы получить хэш строки md5

- (NSString *) md5:(NSString *) input
{
    const char *cStr = [input UTF8String];
    unsigned char digest[16];
    CC_MD5( cStr, strlen(cStr), digest ); // This is the md5 call

    NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];

    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];

    return  output;
}

Когда я делаю это, он отлично работает

[self md5:@"mystring"];

Но когда я делаю это

[self md5:userId];

У меня есть ошибка

Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [NSDecimalNumber UTF8String]: нераспознанный селектор отправлен в экземпляр 0x61a7080'

userIdэто NSString

NSString *userId; @property(retain,nonatomic) NSString *userId;

, но он содержит идентификатор пользователя facebook, что-то вроде "3309843", я пытался

[self md5:[userId stringValue]]];

, и у меня все еще та же ошибка

ОБНОВЛЕНИЕ Я попробовал это

[self md5:@"980232376"];

и все еще с той же ошибкой, я думаю, что проблема заключается в методе md5.Я не могу получить md5 из строки чисел?

1 Ответ

7 голосов
/ 14 декабря 2011

Похоже, что это на самом деле не та строка, которая у вас есть, если вы анализируете json, чтобы получить ее, скорее всего это NSNumber, а не NSString.Все парсеры JSON, которые я пробовал до сих пор, преобразуют числа в NSNumber.Я думаю, что быстрый тест, который можно увидеть, может состоять в том, чтобы просто изменить свойство на NSNumber и затем:

[self md5:[NSString stringWithFormat:@"%@", userId]];
...