为什么我会收到错误 "Unrecognized selector sent to instance error"

Why do I get the error "Unrecognized selector sent to instance error"

我刚刚学习 Objective C 并且遇到了这个问题。我创建了一个简单的管理器 class 就像这样

#import <Foundation/Foundation.h>

@interface PassManager : NSObject

- (void)isValidCredentials:(NSString *) username
          withPassword:(NSString *) password
              wasValid:(void(^)(BOOL success))handler;

@end

实现如下

#import "PassManager.h"

@implementation PassManager

- (void)isValidCredentials:(NSString *) username
          withPassword:(NSString *) password
              wasValid:(void(^)(BOOL success))handler
{
    handler(true); 
}

@end

这是基于 运行 构建的,但出现错误:

"2016-01-27 16:40:41.555 MessyApp[19395:897750] -[PassManager initWithConfiguration:]: unrecognized selector sent to instance 0x7fd12a413d30 2016-01-27 16:40:41.560 MessyApp[19395:897750] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PassManager initWithConfiguration:]: unrecognized selector sent to instance 0x7fd12a413d30'".

我做错了什么?

好吧,错误说明了一切,在您的代码中某处,您正在 PassManager 上调用 initWithConfiguration 方法,但您的 PassManager class,所以抛出异常。

要么添加该方法并在您的 PassManager class 中实施它,要么如果您想要准确地捕捉发生这种情况的位置(并且不想搜索所有出现的 initWithConfiguration.

您可以按 CMD+7 转到 Breakpoint Navigator,然后在底部按 + 符号并添加 Exception Breakpoint、运行 应用程序并等待它开火。

祝你好运。

在与 originaluser2 交谈后,他告诉我是其他原因导致了问题。我正在使用一个名为 Parse 的库,它需要 appdelegate class 中的启动代码,这就是爆炸的原因。有一次他向我展示了我查看了我所做的其他事情并意识到我创建了一个名为 ParseManager 的 class,它导致了某种名称冲突。我更改了这个 classes 名称,果然一切都开始工作了。恐怕我的问题很糟糕,但我是这个平台的新手