Я разрабатываю приложение 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 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
(как отдельно, так и вместе) безрезультатно. Я бы очень признателен за то, как заставить этот селектор работать.
Спасибо!