无法创建 NSError:无法识别的选择器

Posted

技术标签:

【中文标题】无法创建 NSError:无法识别的选择器【英文标题】:Can not create NSError: unrecognized selector 【发布时间】:2013-05-10 21:55:32 【问题描述】:

我正在尝试创建一个 NSError 类别以根据状态代码生成预定义的错误。但是,每当我尝试从我的类别中创建一个 NSError 时,我都会得到一个

+[NSError errorWithDomain:code:userInfo:]: unrecognized selector sent to class 0x2b2b20

我也尝试过调用 NSError Initializer 的实例版本,但结果相同。

+(NSError*)errorOfType:(ErrorType)errorType inClassNamed:(NSString*)_nsClassName andMessage:(NSString*)_nsMessage

    return [[[self class] alloc]initWithType:errorType inClassNamed: _nsClassName andMessage:_nsMessage];



#pragma mark -
#pragma mark - Init

-(id)initWithType:(ErrorType)errorType inClassNamed:(NSString*)_nsClassName andMessage:(NSString*)_nsMessage

    NSInteger _nCode = [self codeFromErrorType:errorType];
    NSDictionary *_nsUserInfo = [self localizedDescriptionForErrorType:errorType andMessage:_nsMessage];

    NSLog(@"Why Does this fail? Is this Nil? %@, \n%i, \n%@", _nsClassName, _nCode, _nsUserInfo);

    if ([self respondsToSelector:@selector(initWithDomain:code:userInfo:)]) 
        if (self = [self initWithDomain:_nsClassName code:_nCode userInfo:_nsUserInfo])

        
    else
        NSLog(@"NSERROR Did not create!!!");
    

    return self;

当我运行这段代码调用静态方法时,输出是:

2013-05-10 17:46:18.851 BMPassSDK-DemoApp[99692:c07] Why Does this fail? Is this Nil? Domain, 
107, 

    NSLocalizedDescription = "A connection to the server could not be made. Please Try again later. ";

2013-05-10 17:46:18.851 BMPassSDK-DemoApp[99692:c07] NSERROR Did not create!!!
2013-05-10 17:46:18.852 BMPassSDK-DemoApp[99692:c07] +[NSError errorWithDomain:code:userInfo:]: unrecognized selector sent to class 0x2b2b20
(lldb) po 0x2b2b20
$0 = 2829088 NSError
(lldb) 

有人对我缺少什么有任何建议吗?

【问题讨论】:

【参考方案1】:

当我第一次创建这个类时,它是 NSError 的子类。后来,当我尝试将其从子类转换为类别时,我不小心将头文件的基类重命名为 NSObject 而不是 NSError。这当然是导致我的问题的原因,因为 NSObjects 不响应选择器 initWithDomain:code:userInfo

不管怎样,谢谢大家的关注。希望它可以帮助别人。

【讨论】:

以上是关于无法创建 NSError:无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章

错误:无法识别的选择器发送到实例

索引到数组字典时出现无法识别的选择器错误

Swift:手势识别器无法识别的选择器发送到实例

Swift 3:将无法识别的选择器发送到手势识别器实例

发送到实例错误的核心数据无法识别的选择器:并且无法在 NSManagedObject 类上调用指定的初始化程序

目标动作模式的快速无法识别的选择器