3

我有以下我无法成功解决的问题。您的帮助将不胜感激。

要从 NSS 字符串计算 md5,类别已定义为:

NSString-md5.h

@interface NSString (MD5)
- (NSString *)MD5String;
@end

NSString-md5.m

#import <CommonCrypto/CommonDigest.h>
#import "NSString-md5.h"
@implementation NSString(MD5)
- (NSString *)MD5String
    {is
    const char *cstr = [self UTF8String];
    unsigned char result[16];    
    CC_MD5( cstr, strlen(cstr), result );
    return [NSString stringWithFormat:
        @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
        result[0], result[1], result[2], result[3], 
        result[4], result[5], result[6], result[7],
        result[8], result[9], result[10], result[11],
        result[12], result[13], result[14], result[15]
        ];  
    }
@end

调用代码(摘录)

#import "NSString-md5.h"
...
NSLog(@"1 %@ ",message.text);
[message.text MD5String];

中止并显示错误消息:

2013-03-03 19:06:14.104 coffreFort[1230:11303] 1 aze 
2013-03-03 19:06:22.777 coffreFort[1230:11303] -[__NSCFString MD5String]: unrecognized selector sent to instance 0x71e62b0
2013-03-03 19:06:22.777 coffreFort[1230:11303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString MD5String]: unrecognized selector sent to instance 0x71e62b0'

message.text 是由定义的 IBOutlet

@property (weak, nonatomic) IBOutlet UITextField *message;
4

1 回答 1

10

这是CLANG的一个问题(他们承诺会修复),其中类别经常被卸载,特别是在框架或库的上下文中。除了强制链接器包含它们之外,您还必须传入链接器标志-all_load(或)用你的二进制文件。-force_load-ObjC

于 2013-03-03T19:22:26.073 回答