unrecognized selector sent to class 问题解决

unrecognized selector sent to class 问题解决

unrecognized selector sent to class 

Xcode9作为最新的iOS的开发工具,相信很多小伙伴们都已经安装了,
大家对于各种兼容和bug修改头都大了吧.

本来,我还真的没有遇到过Xcode找不到文件或者方法的问题.

之前有写过一个demo并上传到gitHub上面, 有朋友下载下来想要使用,
于是他将几个.h和.m等文件合并在一个文件夹内,直接放到项目中,
然后运行就崩溃了

于是就issues告诉到我,我开始以为是他没有在使用的地方引用项目文件,
他却说已经引用了,并且方法名 方法都能调用,
编译都没有问题,但是一运行就报错了

我也蒙了,于是索要了一个问题demo, 拿过来一看,跟我之前的项目没有任何代码区别,仅仅是他将部分代码文件合并放在一个文件夹中.

于是编译运行,崩溃了,

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[UIBarButtonItem itemWithTarget:action:image:]: unrecognized selector sent to class 0x104e51c20'

出现了这样的日志,
很明显的原因就是一个没有找到该类的方法或者文件,

于是基于以前开发的经验,

  • 解决方法1:

前往targets的building setting 的Other Linker flags
添加以下两项
-all_load
-ObjC

如果还是不行的话,就把你需要添加的文件直接拖到该项中,手动关联即可
你之前的问题,就是因为这个引起的,只要在Other Linker flag 添加需要相应的文件路径即可
类似这样


这里写图片描述

再次编译运行,果然,项目顺利运行了,
于是将解决方案告知朋友,

然后令我崩溃的事情出现了

朋友说手抖删掉了某一个添加的索引,然后自己就不会添加了..

心中很是无语,告诉了方法之后,我又开始思考.这样的问题如果这么容易出现,每个文件都需要手动添加索引的话,不就太麻烦了吗?
other link flags 很多人都知道,项目中添加某些静态库可能会需要设置这个,但是一般是不需要的,不可能一个文件夹就能影响这么大的

  • 解决方法2:

于是想到是否是因为文件没有包含到对应的target中?


这里写图片描述

添加文件的时候明明已经add to targets了,
但是进去项目中,查看.m文件.果然,朋友的文件中不能运行代码的文件就是缺少了这个,对比项目中的其他文件,仅仅是缺少这个勾选
于是勾选target membership,果然编译运行都好了


这里写图片描述

不需要一个一个文件手动添加索引了,只需要勾选一下即可
看来这个才是最好的解决方法.

这个应该是Xcode9的一个bug. 最起码我之前没有遇到过.....

于是在此记录一下这个问题,第一时间告诉到朋友,并分享给大家,方便大家遇到类似的问题能够找到解决方案

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,239评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,281评论 19 139
  • 因为要结局swift3.0中引用snapKit的问题,看到一篇介绍Xcode8,swift3变化的文章,觉得很详细...
    uniapp阅读 10,166评论 0 12
  • 在我印象中最深的第一个厨房。莫过于奶奶家的土厨房,虽然没有华丽的外表,也没有齐全的设备,但是却让人感到很温馨...
    八月柒秋夜初凉阅读 2,600评论 0 1
  • 今天我们下午学了美术课。今天数学还考试了,我得了100。放学回到家赶紧写作业,写完作业我们就吃饭了。
    马涵晴阅读 1,783评论 0 0

友情链接更多精彩内容