-[__NSCFNumber rangeOfCharacterFromSet:]: unrecognized selector sent to instance
這個是由于傳的參數(shù)類型不對所導致
比如:人家要字符串類型的數(shù)據(jù),你卻傳了個nsnumber類型的,編譯時是不會報錯的,但運行結束后會崩
單來說哈肖,這個問題分兩個方面肴裙。
- 錯誤如下碗誉,這表示是查詢 Library 的時候出現(xiàn)的異常推励。
"directory not found for option '-L/..."
解決方法:
依次 Project -> targets -> Build Setting -> Library Search Paths
刪除里面的路徑
- 錯誤如下, 這表示是查詢 Framework 的時候出現(xiàn)的異常旧找。
"directory not found for option '-F/..."
解決方法:
依次 Project -> targets -> Build Setting -> Framework Search Paths
刪除里面的路徑
解釋
簡單說一下 Library Search Paths 和 Framework Search Paths 溺健。
Framework Search Paths
官方文檔 能查到的解釋是:
Locating Frameworks in Non-Standard Directories
If your project links to frameworks that are not included in any of the standard locations, you must explicitly specify the location of that framework before Xcode can locate its header files. To specify the location of such a framework, add the directory containing the framework to the “Framework Search Paths” option of your Xcode project. Xcode passes this list of directories to the compiler and linker, which both use the list to search for the framework resources.
Note: The standard locations for frameworks are the /System/Library/Frameworks directory and the /Library/Frameworks directory on the local system.
大意是說麦牺,如果你引用的 Frameworks 沒有在標準位置(standard locations)钮蛛,那么,你需要在工程的配置文件里設置 “Framework Search Paths”剖膳, 用來為編譯器(compiler)和連接器(linker)指定搜索路徑魏颓。
Library Search Paths
至于 “Library Search Paths”,沒有查到像樣的官方文檔吱晒,不過想想內(nèi)容應該是差不多的甸饱,不過一個用來搜索Framework,一個用來搜索Library仑濒。
話雖然是這么說叹话,但是什么是Library,什么是Framework墩瞳,還是很蒙圈驼壶。
不過,搜索到了一些博客喉酌,來說明這個問題热凹,現(xiàn)引用在下方。
引用
iOS開發(fā)中的Search Paths設置
在 iOS 開發(fā)中經(jīng)常遇到一些關于路徑的設置泪电,比如引入了百度地圖的 SDK般妙,項目拷貝到其他的電腦上或者多人同時開發(fā)的時候容易報 Library Not Found 的錯誤,或者是引入第三方庫比如 ASIHttpRequest/RETableView 經(jīng)常報 #include <> 的錯誤這就需要配置一些搜索路徑相速。
Framework/Library Search Paths
1碟渺、Framework Search Paths
附加到項目中的framework(.framework bundles)的搜索路徑,在iOS開發(fā)中使用的不是特別多,通常對于iOS的開發(fā)來說一般使用系統(tǒng)內(nèi)置的framework突诬。
2苫拍、Library Search Paths
附加到項目中的第三方Library(.a files)的搜索路徑烹棉,Xcode會自動設置拖拽到Xcode中的.a文件的路徑,為了便于移植或者是多人協(xié)作開發(fā)一般會手動設置怯疤。
比如對于設置百度的地圖的SDK浆洗,我們會設置如下:
$(SRCROOT)/../libs/Release$(EFFECTIVE_PLATFORM_NAME),其中 $(SRCROOT)宏代表您的工程文件目錄集峦,$(EFFECTIVE_PLATFORM_NAME)宏代表當前配置是 OS 還是 simulator
Header Search Path
1伏社、C/C++頭文件引用
在C/C++中,include是變異指令塔淤,在編譯時摘昌,編譯器會將相對路徑替換成絕對路徑,因此高蜂,頭文件的絕對路徑等同于搜索路徑+相對路徑聪黎。
(1) #include <iostream.h>:引用編譯器的類庫路徑下的頭文件
(2)#include "hello.h":引用工程目錄的相對路徑的頭文件
2、(User) Header Search Path
(1)Header Search Path指的是頭文件的搜索路徑备恤。
(2)User Header Search Paths指的是用戶自定義的頭文件的搜索路徑
3稿饰、Always Search User Paths
如果設置了Always Search User Paths為YES,編譯器會優(yōu)先搜索 User Header Search Paths 配置的路徑,在這種情況下 #include <string.h>, User Header Search Paths 搜索目錄下面的文件會覆蓋系統(tǒng)的頭文件露泊。
object file (/Users/apple/Library/Developer/Xcode/DerivedData/Test0418-cfpryaixnfxogyfwnsfimebphcxd/Build/Products/Debug-iphonesimulator/libAFNetworking.a(AFAutoPurgingImageCache.o)) was built for newer iOS version (7.0) than being linked (6.0)
原因:
我使用CocoaPods安裝第三方代碼之前,創(chuàng)建的Podfile文件中設置的ios最低版本是7.0(見下圖)基本可以斷定上面的警告version(7.0)就是指的這個了.那這個(6.0)是個什么鬼?
突然想起來,我剛開始創(chuàng)建項目的時候選擇的支持系統(tǒng)最低版本是6.0(見下圖)
然后基本確定應該就是這的問題了,然后我試著把6.0改為了7.0,果然不出所料,上面類似的警告都沒了
link 錯誤
- 導入文件的.m文件
- 重復創(chuàng)建重名的類名
- 導入的庫文件不支持模擬器