我是Objective C的新手,无法理解为什么会收到此错误。我检查了其他类似的问题,但无法解决该问题。

错误是“-[NSConcreteMutableData base64Decoded]:无法识别的选择器已发送到实例0x6e15610”

这是问题代码的片段,对base64Decoded的调用导致崩溃。

#import "DDData.h"

- (NSString *)decodeBase64:(NSString *)input
{
    NSData* dataDecoded = [[input dataUsingEncoding:NSUTF8StringEncoding] base64Decoded];
    return [NSString stringWithUTF8String:[dataDecoded bytes]];
}


在DDData.h中:

#import <Foundation/Foundation.h>

@interface NSData (DDData)

- (NSData *)base64Decoded;

@end


和DDData.m:

@implementation NSData (DDData)

- (NSData *)base64Decoded
{
     // Excluding function code, as it never gets to here
}

@end


请注意,该项目已启用ARC。关于这里可能有什么问题的任何想法?谢谢。

编辑:我已经调整了上面的代码以帮助调试错误:

 NSData* dataDecoded = [input dataUsingEncoding:NSUTF8StringEncoding];
[dataDecoded base64Decoded];


dataDecoded从dataUsingEncoding获取一个值,当对base64Decoded进行调用时,它不是nil。当我进入对base64Decoded的调用时,它崩溃了。

最佳答案

如果尝试对对象执行未定义的方法,则会收到此类消息。像这样尝试:

NSData *dataDecoded = [[input dataUsingEncoding:NSUTF8StringEncoding] base64EncodedString];


据我所知,没有base64Decoded方法,但是有base64EncodedString。因此,当您将base64Decoded消息发送到NSData对象时,由于它根本不存在,因此无法识别。

08-27 19:12