寫在前面:作為程序猿钥顽,在開發(fā)的過程中肯定會(huì)遇到各種編譯報(bào)錯(cuò)义屏,崩潰問題。一個(gè)好的程序猿會(huì)根據(jù)控制臺給出的提示快速的解決問題蜂大。下面一起來看看各種錯(cuò)誤吧:
文件丟失
1.error: /Users/apple/Downloads/xxx.png: No such file or directory
這個(gè)錯(cuò)誤是xxx圖片被不在項(xiàng)目的目錄下闽铐,解決:(1)將該圖片add到項(xiàng)目的目錄下;(2)直接將紅色名字的圖片刪除奶浦。
編譯錯(cuò)誤
1.error:linker command failed with exit code 1 (use -v to see invocation) -no_pie and -bitcode_bundle(Xcode setting ENDBLE_BITCODE=YES)cannot be used together;
這個(gè)bitcode是被編譯程序的一種中間形式的代碼兄墅。包含bitcode配置的程序?qū)?huì)在App store上被編譯和鏈接。bitcode允許蘋果在后期重新優(yōu)化我們程序的二進(jìn)制文件澳叉,而不需要我們重新提交一個(gè)新的版本到App store上隙咸。是xcode7 之后更新的。在我們新建項(xiàng)目的時(shí)候默認(rèn)是YES.如果我們的工程需要支持bitcode成洗,則必要要求所有的引入的第三方庫都支持bitcode五督。
對于iOS,bitcode是可選的瓶殃。
對于watchOS充包,bitcode是必須的。
對于Mac OS碌燕,bitcode不支持误证。
解決:我們可以在”Build Settings”->”Enable Bitcode”選項(xiàng)中看到這個(gè)設(shè)置继薛,并將它設(shè)置為NO。
2.The operation couldn't be completed.(LaunchServicesError error 0.)
這個(gè)問題出現(xiàn)的原因:修改了Bundle ID.
解決:重新啟動(dòng)iOS模擬器
3.XCODE中錯(cuò)誤: Undefined symbols for architecture i386 error
原因:出現(xiàn)Undefined symbols for architecture i386這種錯(cuò)誤一般是你用模擬器作為目標(biāo)愈捅,但編譯的時(shí)候找不到相關(guān)的庫文件遏考。
解決:需要做的就是把庫文件所在的位置添加到library search path中。
4.編譯出現(xiàn)錯(cuò)誤:linker command failed with exit code 1
ld: warning: ignoring file /Volumes/Xcode/Xcode.app/Contents/Developer/Library/Frameworks/SenTestingKit.framework/SenTestingKit, missing required architecture armv7 in file
ld: duplicate symbol OBJC_METACLASS$_MMApiRegister in /Users/wangbin/Desktop/00_ios/hezi_ios08/WXSDK/libWeChatSDK.a(WeChatRegister.o) and /Users/wangbin/Desktop/00_ios/hezi_ios08/WXSDK/libWeChatSDK.a(WeChatRegister.o) for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
這個(gè)問題不知道到底是什么回事...(貌似沒適配 armv7)
解決辦法:把.a 文件移除了蓝谨,再重新添加.a文件 灌具,就編譯過了。
5.xcode 真機(jī)調(diào)試錯(cuò)誤:Could not find Developer Disk Image
解決方法:
方法1:拷貝這個(gè)文件點(diǎn)我到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport譬巫,然后重新啟動(dòng)xcode(完全退出)就可以了咖楣。
方法2:更新Xcode到7.2版本。
6.Unknown class XXViewController in Interface Builder file. 問題處理芦昔。
7.問題:apple Mach-o Linker error 诱贿。
解決:通常是compile source 中有相同的.m文件。
8.問題:真機(jī)調(diào)試出現(xiàn)failed to get the task for process.
解決:證書可能出現(xiàn)問題咕缎。(過期珠十,不匹配等)
9.問題:報(bào)錯(cuò)expect a type。
解決:可能出現(xiàn)在.h文件的循環(huán)引用凭豪,包含文件用@class代替即可焙蹭。
10.問題:報(bào)錯(cuò)linker command failed with exit code 1 (use -vto see invocation)
解決L:出現(xiàn)了兩個(gè)完全一樣的m文件,刪除即可嫂伞。(另外:如果代碼中有c或者c++的混編孔厉,也不能在兩個(gè)不同名稱的mm文件中進(jìn)行聲明或者引用,這樣也會(huì)觸發(fā)這個(gè)錯(cuò)誤的發(fā)生)
11.問題:報(bào)錯(cuò)Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:]
原因:就是函數(shù)- (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath )indexPath
這個(gè)函數(shù)的返回值是個(gè)null*帖努。
解決:檢查**- (UITableViewCell *)tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath )indexPath
這個(gè)函數(shù)的代碼邏輯撰豺。
12.問題:集成支付寶 warning: (arm64) /Users/scmbuild/workspace/standard-pay/IOS/cp_record_client_release_556515/14 產(chǎn)生一大推警告。
因?yàn)椋篈lipaySDK.framework 是先 build 的靜態(tài) lib 然磷,然后轉(zhuǎn)成的 framework 郑趁,但是在 build 靜態(tài) lib 時(shí) CLANG_ENABLE_MODULES 沒有被設(shè)置成 disabled
解決:如圖
Go to Build Settings -> Build Options -> Debug Information Format
Change the Debug setting from "DWARF with dSYM File" to "DWARF"
Leave the Release setting at "DWARF with dSYM File"
13.問題:集成微信SDK,報(bào)錯(cuò) -[__NSArrayM enqueue:]: unrecognized selector sent to instance 0x170243ba0。
解決:你的工程文件中選擇Build Setting姿搜,在"Other Linker Flags"中加入"-Objc"寡润,其中-ObjC的C要大寫。
文件引用
1.在link with lib 種添加 ** libxml2.dylb 后** 引用不了老是找不到頭文件
解決:找到Project -> Edit Project Settings -> Build Settings舅柜,把“/usr/include/libxml2″添加到“Header Search Paths” 和 “-lxml2″添加到“Other Linker Flags”
實(shí)用技巧
1.如何在UITableView上添加手勢實(shí)現(xiàn)點(diǎn)擊TableView收回鍵盤梭纹,并且不與點(diǎn)擊cell事件沖突?有時(shí)候tableView上會(huì)存在輸入控件會(huì)彈出鍵盤致份,需要點(diǎn)擊tableView收回鍵盤变抽。
解決:
(1),設(shè)置鍵盤return key的點(diǎn)擊事件收回鍵盤;
(2)绍载,當(dāng)某些需求必須要點(diǎn)擊table收回鍵盤的時(shí)候诡宗,就可以試試給tableView添加手勢。
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(touchTableView)];
tap.cancelsTouchesInView = NO;
[tableV addGestureRecognizer:tap];
tap.cancelsTouchesInView = NO; 這句很重要击儡,cancelsTouchesInView系統(tǒng)默認(rèn)為YES.就是當(dāng)手點(diǎn)擊的時(shí)候接受到了這個(gè)手勢點(diǎn)擊事件塔沃,其他的view是否能接收點(diǎn)擊事件。如果不設(shè)置為NO,那你點(diǎn)擊cell之后是不會(huì)觸發(fā)table的回調(diào)點(diǎn)擊方法的阳谍。設(shè)置為NO之后蛀柴,就不會(huì)和點(diǎn)擊cell沖突了。
這篇文章會(huì)一直更新下去矫夯,只要碰到問題或看到問題都會(huì)更到文章上鸽疾,并貼出答案。(大家要可以把你們碰到的問題以及解決辦法評論在文章下面训貌,我看到之后制肮,會(huì)貼到文章上,并@你递沪,這文章主要是起沉淀作用弄企,自己以后碰到問題也許能在這找到答案,也能幫助同行的程序猿区拳。問題無法解決的或者是答案有誤的,歡迎大家指出意乓,好及時(shí)作出更正)