Dan*_*iel 10 objective-c categories ios
我正在开发一个需要部署到iOS 3.1.3的iOS应用程序.我需要扩展NSData类的一些功能,并在NSData + Base64中使用以下代码(截断以显示有趣的部分):
[...]
@interface NSData (Base64)
+ (NSData *)dataFromBase64String:(NSString *)aString;
- (NSString *)base64EncodedString;
@endRun Code Online (Sandbox Code Playgroud)
@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;
}
@endRun Code Online (Sandbox Code Playgroud)
但是,当我尝试发送此选择器时:
NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
NSString *hash = [HMAC base64EncodedString];
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
-[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'
Run Code Online (Sandbox Code Playgroud)
我读了很多关于iOS 3.1.x的类别问题.我尝试添加标志-all_load和-ObjC(分别和一起)无济于事.我真的很感激如何使这个选择器工作的方向.
谢谢!
Rya*_*yan 19
看起来您的类别似乎没有被编译或链接到您正在使用它的同一目标.您应该确保NSData + Base64.m被标记为由使用它的同一目标编译,方法是获取两个文件的信息并比较它们分配给它们的目标.
您可以执行的测试是向NSData + Base64.m添加带有#error错误消息的行,这将导致构建在到达该文件时失败.像这样:
#error We're now compiling NSData+Base64.m
Run Code Online (Sandbox Code Playgroud)
然后查看哪个目标无法编译.
| 归档时间: |
|
| 查看次数: |
14452 次 |
| 最近记录: |