Objective-C中的“隐式函数声明”错误

时间:2011-12-13 23:18:56

标签: iphone objective-c md5

我想将一个短字符串转换为md5哈希,我发现了几个关于它的帖子,但没有人工作。 这是我发现的最简单的例子。我有这个错误

  

函数CC_MD5的隐式声明在C99中无效

- (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;
 }

更新 我添加了#import,当我调用这样的方法时它工作正常:

[self md5:@"admin"];

,我得到了正确的md5哈希。但是当我这样做时

 [self md5:userId];

我收到错误,

  

[NSDecimalNumber UTF8String]:发送到实例的无法识别的选择器   0x4d3e280   但是userId不是小数,他包含facebook id,但它被声明为NSString

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

3 个答案:

答案 0 :(得分:26)

因为没有看到CC_MD5的声明。

在项目中包含安全框架

#import <CommonCrypto/CommonDigest.h>

答案 1 :(得分:3)

您需要在类顶部的Crypto库中包含CommonDigest Header文件,其中定义了MD5函数并包含安全框架

#import <CommonCrypto/CommonDigest.h>

答案 2 :(得分:0)

您是否导入了定义CC_MD5的正确界面?

#import "CommonDigest.h"