在自定义 init 方法上发送到实例的无法识别的选择器

Posted

技术标签:

【中文标题】在自定义 init 方法上发送到实例的无法识别的选择器【英文标题】:Unrecognized selector sent to instance on custom init method 【发布时间】:2011-07-08 04:33:33 【问题描述】:

我有一个名为 Communicator 的对象。

Communicator 有一个自定义的初始化方法-(id)initWithEmail:(NSString*)theEmail andPassword:(NSString*)thePassword andPlatform:(NSString*)thePlatform;

我的应用委托有一个 Communicator 作为一个名为 communicator 的成员变量。

applicationDidFinishLaunching 我这样做

communicator = [[Communicator alloc] initWithEmail:@"email" andPassword:@"password" andPlatform:@"mac"];

在控制台中它会打印两次-[Communicator initWithEmail:andPassword:andPlatform:]: unrecognized selector sent to instance 0x10064c4b0

该方法存在并已定义。 “communicator”绝对是一个 Communicator 对象。项目编译时没有任何警告。

Communicator 是在我自己制作的自定义框架中定义的。我用了otool,它说initWithEmail:andPassword:andPlatform方法在里面。

似乎我在构建框架时搞砸了一些东西,但我不知道它可能是什么。该项目可以毫无问题地构建、链接和启动。 是否有一些我可能搞砸的项目设置?还有其他想法吗?

【问题讨论】:

可能是一个微妙的错字。请复制并粘贴实际的方法签名。 另外请复制并粘贴整个异常消息。您在左方括号前遗漏了一个重要字符。 OT:Apple 对方法命名的建议是不要使用“and”作为参数之间的分隔符,保留它以表示按时间顺序排列,如takeTeacup:(Teacup *)cup spoon:(Silverware *)spoon andStir:(NSInteger *)seconds @Jason:我知道。成员变量声明就像这样Communicator *communicator; 【参考方案1】:

我有些东西设置错了。我没有处理自定义框架上的框架安装路径,而是将其复制到框架文件夹中。当然,我忘记了我这样做了,每次我对框架进行更新时,它都会重新回到我停留在框架文件夹中的旧副本。这太令人沮丧了。

【讨论】:

以上是关于在自定义 init 方法上发送到实例的无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 无法识别的选择器发送到 SDWebImage 方法上的实例

[[NSCFString objectForKey:]:无法识别的选择器已发送到实例

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

如何解决“发送到实例的无法识别的选择器”?

在目标上调用 xxx 时抛出无法识别的发送到实例的选择器

NSManagedObject 子类 - 发送到实例的无法识别的选择器