Категории в Objective-C не работают

Я разрабатываю приложение iOS, которое необходимо развернуть на iOS 3.1.3. Мне нужно чтобы расширить некоторые функции класса NSData, и я использую следующий код внутри NSData + Base64 (усеченный, чтобы показать интересную часть):

NSData + Base64. h

[...]

@interface NSData (Base64)

+ (NSData *)dataFromBase64String:(NSString *)aString;
- (NSString *)base64EncodedString;

@end

NSData + Base64.m

@implementation NSData (Base64)

[...]

//
// base64EncodedString
//
// Creates an NSString object that contains the base 64 encoding of the
// receiver's data. Lines are broken at 64 characters long.
//
// returns an autoreleased NSString being the base 64 representation of the
//  receiver.
//
- (NSString *)base64EncodedString
{
    size_t outputLength;
    char *outputBuffer =
        NewBase64Encode([self bytes], [self length], true, &outputLength);

    NSString *result =
        [[[NSString alloc]
            initWithBytes:outputBuffer
            length:outputLength
            encoding:NSASCIIStringEncoding]
        autorelease];
    free(outputBuffer);
    return result;
}

@end

Однако, когда я пытаюсь отправить сообщение этому селектору:

NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
NSString *hash = [HMAC base64EncodedString];

, я получаю следующую ошибку:

 -[NSConcreteData base64EncodedString]: unrecognized selector sent to instance 0x6146e70
2010-11-09 13:44:41.443 SpringboardApplication[21318:40b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteData base64EncodedString]: unrecognized selector sent to instance 0x6146e70'

Я много читал о iOS 3.1.x, имеющей проблемы с категориями. Я попытался добавить флаги -all_load и -ObjC (как по отдельности, так и вместе), но безрезультатно. Я был бы очень признателен за то, как заставить этот селектор работать.

Спасибо!

10
задан Daniel 9 November 2010 в 20:48
поделиться