在自定义 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 方法上的实例