unrecognized selector sent to class 問題解決

#unrecognized selector sent to class 問題解決git

unrecognized selector sent to class 
複製代碼

Xcode9做爲最新的iOS的開發工具,相信不少小夥伴們都已經安裝了, 你們對於各類兼容和bug修改頭都大了吧.bash

原本,我還真的沒有遇到過Xcode找不到文件或者方法的問題.app

以前有寫過一個demo並上傳到gitHub上面, 有朋友下載下來想要使用, 因而他將幾個.h和.m等文件合併在一個文件夾內,直接放到項目中, 而後運行就崩潰了工具

因而就issues告訴到我,我開始覺得是他沒有在使用的地方引用項目文件, 他卻說已經引用了,而且方法名 方法都能調用, 編譯都沒有問題,可是一運行就報錯了開發工具

我也蒙了,因而索要了一個問題demo, 拿過來一看,跟我以前的項目沒有任何代碼區別,僅僅是他將部分代碼文件合併放在一個文件夾中.ui

因而編譯運行,崩潰了,spa

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

出現了這樣的日誌, 很明顯的緣由就是一個沒有找到該類的方法或者文件,3d

因而基於之前開發的經驗,日誌

  • 解決方法1:

前往targets的building setting 的Other Linker flags 添加如下兩項 -all_load -ObjCcode

若是仍是不行的話,就把你須要添加的文件直接拖到該項中,手動關聯便可 你以前的問題,就是由於這個引發的,只要在Other Linker flag 添加須要相應的文件路徑便可 相似這樣

這裏寫圖片描述

再次編譯運行,果真,項目順利運行了, 因而將解決方案告知朋友,

而後令我崩潰的事情出現了

朋友說手抖刪掉了某一個添加的索引,而後本身就不會添加了..

心中非常無語,告訴了方法以後,我又開始思考.這樣的問題若是這麼容易出現,每一個文件都須要手動添加索引的話,不就太麻煩了嗎? other link flags 不少人都知道,項目中添加某些靜態庫可能會須要設置這個,可是通常是不須要的,不可能一個文件夾就能影響這麼大的

  • 解決方法2:

因而想到是不是由於文件沒有包含到對應的target中?

這裏寫圖片描述
添加文件的時候明明已經add to targets了, 可是進去項目中,查看.m文件.果真,朋友的文件中不能運行代碼的文件就是缺乏了這個,對比項目中的其餘文件,僅僅是缺乏這個勾選 因而勾選target membership,果真編譯運行都好了
這裏寫圖片描述

不須要一個一個文件手動添加索引了,只須要勾選一下便可 看來這個纔是最好的解決方法.

這個應該是Xcode9的一個bug. 最起碼我以前沒有遇到過.....

因而在此記錄一下這個問題,第一時間告訴到朋友,並分享給你們,方便你們遇到相似的問題可以找到解決方案