【问题标题】:NSData Unrecognized selector sent to classNSData无法识别的选择器发送到类
【发布时间】:2018-03-25 18:56:32
【问题描述】:

运行我的应用时出现以下错误:

+[NSData dataFromBase64String:]: 无法识别的选择器发送到类 0x1aff66598 由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'+[NSData dataFromBase64String:]: 发送到类的无法识别的选择器 0x1aff66598'

调用者如下所示:

NSString* decodedData = [self base64Decode:encodedData];

方法定义如下:

- (NSString *)base64Decode:(NSString *)base64String {
    NSData *plainTextData = [NSData dataFromBase64String:base64String];
    NSString *plainText = [[NSString alloc] initWithData:plainTextData encoding:NSUTF8StringEncoding];
    return plainText;
}

// This is in another class
+ (NSData *)dataFromBase64String:(NSString *)aString {
    NSData *data = [aString dataUsingEncoding:NSASCIIStringEncoding];
    if( data == nil )
        return nil;
    size_t outputLength;
    void *outputBuffer = NewBase64Decode([data bytes], [data length], &outputLength);
    NSData *result = [NSData dataWithBytes:outputBuffer length:outputLength];
    free(outputBuffer);
    return result;
}

我不确定我做错了什么......

【问题讨论】:

  • 添加#import "NSData+Base64.h" ?
  • 什么文件包含dataFromBase64String的实现?它是否定义为NSData 类别?该文件是否已链接到您的应用?
  • 你知道NSData已经有base64相关的功能了吗?它是在 iOS 7 中重新添加的。
  • 如果 这是在另一个类中,你必须调用它 [AnotherClass dataFromBase64String:base64String];

标签: ios objective-c unrecognized-selector


【解决方案1】:

您在 Objective-C 类别中的“dataFromBase64String:”是在静态框架或库中实现的吗?

如果是这种情况,则该类别中的方法不包含在链接中,因此在运行时找不到,除非您在 Xcode 中的 OTHER_LINKER_FLAGS 上添加标志“-ObjC -all_load”。

https://developer.apple.com/library/content/qa/qa1490/_index.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    相关资源
    最近更新 更多