IOS异常记录
1. ***?unrecognized selector sent to
1.*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILabel labelWithType:]: unrecognized selector sent to instance 0xb5a3700'
*** First throw call stack:? ? ? ?錯誤原因:該類沒有找到該方法,調用錯誤。
? ? ? 遇到的四種原因: ?
? ? ? ?<1>確認文件沒問題,方法存在。然后檢查編譯文件列表(bulid phases -> complie sources)里面有沒有該文件,如果該文件沒有被編譯,增加它。文件沒有被編譯,故該文件的方法都不能別識別。? ? ? ?<2>unrecognized selector sent to class,特別注意下這里面的class,主要原因是類別調用錯誤的方法造成的(例如該變量獲取了一個obj,但是該obj本應該是A類,實際上卻獲取了B類的值,故該obj肯定不能正確的響應A類的方法)。打印調用方法的obj,查看該Obj的類名,然后查看該類是否存在該方法,如果不存在,實現它,或者刪除對該方法的調用。
? ? ? ? ? ? ? <2.1>對于代理調用回調方法可以這樣使用,防止出現這種崩潰.
? ? ? ? ? if?([delegate respondsToSelector:@selector(selector)])
? ? ? ? ? {
? ? ? ? ? ? ? [delegate selector];
? ? ? ? ? }
? ? ? ?<3>unrecognized selector sent to intance問題主要是臨時變量引起的。調用方法的臨時變量已經在其他的地方被釋放,故此時調用它的方法或造成崩潰。檢查該變量在調用其實例方法時是否可能已經被釋放了。
? ? ? ?<4>遇到一個數據庫實體調用它的實例方法時報這個錯誤的。
? ? ? ? ? ? ? 數據庫實體初始化完成之后,不能識別它的實例方法,只要調用就會崩潰。
? ? ? ? ? ? ?最終定位為數據庫中查看該表的屬性,發現表名稱是正確的,但是關聯的類名是NSManagedObject,而非正確的類名。所以,生成數據庫表相應的實體類時,可以Editor->Created NSManagedObject Class...創建實體類,這樣就會自動把表和類進行關聯。如果手動創建的實體類是不會關聯的,需要手動關聯,否則就會出現類似的錯誤。
2.Undefined symbols for architecture i386:
? ? ? ? 發生這種錯誤通常是project.pbxproj這個文件引起的,尤其在多人合作開發的時候,svn提交不規范可能導致project.pbxproj發生錯誤,導致文件的引用不在project.pbxproj文件中。
? ? ? ? ?xcode項目import文件會根據project.pbxproj來查找,查找不到文件的引用則會有上述的錯誤。
? ? ? ? ?解決方法點擊工程,在主界面中點擊Build Phases,根據提示信息“XXX”來判斷缺少什么文件,一般如果缺少自定義的文件,XXX會是缺少的類名,那么就在Complie Sources中加入該文件。如果缺少類庫,則在Link Binary With Libraries中加入該類庫。
? ? ? ? ?<1>在編譯RegexKitLite的時候,報錯類似錯誤。
? ? ? ? ?需要在在項目的編譯設置中找到Other Linker Flags,然后在后面字段空白處雙擊,添加“-licucore”就可以了,引用正則框架必須打開此開關。
? ? ? ? ?-licucore,注意不要打錯,打錯了會報錯誤:clang: error: no such file or directory: '-licucore'
總結
- 上一篇: presentViewControlle
- 下一篇: ZBar 自定义界面