xCode中常見的錯誤分析

來源:互聯網
上載者:User

xCode中常見的錯誤分析
程式中報錯:@synthesize of ‘weak’ property is only allowed in ARC or GC mode的解決方案

現在的項目是手動記憶體管理,所以在引入第三方資產庫時候,很多資產庫更新以後都開始使用arc進行編碼,這樣就導致兩種代碼風格不一致,有的時候可能開發人員也沒有注意到這些問題,反正用的時候也沒有報錯,就直接使用了;但是有的時候,因為arc編碼中用到了新的屬性修飾符,例如weak,這時候在手動管理記憶體的代碼中就不能編譯通過,報錯的內容就是:@synthesize of ‘weak’ property is only allowed in ARC or GC mode,這就是引入的arc代碼在項目中的衝突,有一種解決辦法就是把資原始碼中的weak修飾符改為assign,但是這種方法畢竟是把別人寫的代碼給改了,有的時候往往會出現閃退、崩潰的問題。

比較好的解決辦法就是項目設定檔->Build Phrases->Complie Sources,找到出現問題的資產庫檔案(比如weak修飾符所在的檔案),雙擊Complie Files中的該檔案,在空白行中寫入-fobjc-arc,這樣就可以有效防止該衝突。反過來有的時候,在arc代碼中引入手動管理記憶體的代碼,我們在Complie Files中為新增的資源檔增加-fno-objc-arc,這樣就避免了手動管理記憶體的代碼在arc代碼中的衝突。

BMKGeoCodeSearch 反向地理編碼一直失敗 Location

申請的key的安全碼與代碼中build id不一樣,修改成一樣就OK了

建立一個類,將百度地圖的定位功能封裝起來以後,定位的代理方法不走

定位是要一直持續的,而我們建立這個類,如果不設定成,staic靜態變數,他就會自動銷毀,對象銷毀以後肯定不會定位了。

ios8系統 點擊設定隱私定位功能直接崩潰的問題

這個問題出現的原因肯定不是ios8系統的問題,因為其他app都好的,為什麼你的APP就有問題,肯定是你加代碼的時候什麼地方寫錯了。
我對照代碼找了好幾遍,終於發現有個地方和別人的不一樣,那就是設定plist檔案變數的時候Type類型BOOl應該是String。估計蘋果是通過字串對比來判斷的,所以BOOl類型就直接崩潰了。

使用cateogry調用不了類目裡的方法

需要在被擴充的類的.m檔案中,匯入你所擴充的類,在類目中不能聲明變數

彈出不同步 同一時間下來上拉重新整理兩次,有時資料來源數組會是空造成奔潰

資料來源數組採用懶載入,另外記得給數組賦nil,最好這樣做。

輸入框與鍵盤的彈出不同步

這表明監聽鍵盤錯誤,應該監聽的是鍵盤將要顯示的通知,而不是鍵盤顯示出以後的通知

-[UITableView _configureCellForDisplay:forIndexPath:]

因為- (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 這個函數的傳回值中有nil

問題 Xcode 工程檔案打不開,cannot be opened because the project file cannot be parsed. (代碼更新時,可能有這種情況)

解答 這是因為.xcodeproj工程檔案衝突了
衝突訊息資訊
<<<<<<< .mine 9ADAAC6A15DCEF6A0019ACA8 …. in Resources /, ======= 52FD7F3D15DCEAEF009E9322 … in Resources /, >>>>>>> .r269

解決方案: 1.對.xcodeproj 檔案右鍵,顯示包內容
2.雙擊開啟 project.pbxproj 檔案
3.找到以上類似的衝突資訊(可以用commad + f 搜尋)
4.刪除 <<<<<<<,======,>>>>>>這些行
5.儲存,退出
6.重新開啟.xcodeproj檔案即可

問題 使用arc編寫的檔案,如何不用刪release

解答 在build phases 的complies sources設定中將相應的檔案設定為-fno-objc-arc

問題:libxml/tree.h file not found解決辦法

解答:1. 匯入libxml2.dylib 包

  2.設定Header Search Paths 為 /usr/include/libxml2 :    ![這裡寫圖片描述](http://img.blog.csdn.net/20160421084710872)
問題:__dns_free_resource_r_dns_free環信SDK整合EaseMobSDK

“_dns_free_resource_record”, referenced from: -[XMPPSRVResolver processRecord:length:] in libEaseMobClientSDKLite.a(XMPPSRVResolver.o)
這樣的錯誤,是由於缺少庫:
添加libresolv.dylib庫,就可以了

使用上拉下拉重新整理方法時,如果跳出該介面接記得釋放上拉下拉重新整理類(老版本的MJRefresh)
不能在viewdidload中跳轉控制器

問題:AFNetworking請求中含中文時程式崩潰

AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];[manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {//} failure:^(AFHTTPRequestOperation *operation, NSError *error) {//}];
出現error:
Assertion failure in -[AFHTTPRequestSerializer requestWithMethod:URLString:parameters:error:]
需要處理urlString的編碼
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

徹底解決 OBJC_CLASS$_某檔案名稱”, referenced from:問題

http://www.cnblogs.com/g-ios/p/4625907.html

Receiver type ‘TableViewCellFrame’ for instance message is a forward declaration
這往往是引用的問題。ARC要求完整的前向引用,也就是說在MRC時代可能只需要在.h中申明@class就可以,但是在ARC中如果調用某個子類中未覆蓋的父類中的方法的話,必須對父類.h引用,否則無法編譯。

程式發布後,發現一個bug,需要在自己手機調試時,出現:a valid provisioning profile for this executable was not found錯誤.

是因為發布的時候把schema裡的”Build Configuration”改成了release。而release對應的provision是用發布認證的。把”Build Configuration”改成了debug就好了。
because the App Transport Security policy requires the use of a secure connection

網路訪問失敗。
輸出錯誤資訊:The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.Google後查證,iOS9引入了新特性App Transport Security (ATS)。詳情:App Transport Security (ATS)

新特性要求App內訪問的網路必須使用HTTPS協議。
但是現在公司的項目使用的是HTTP協議,使用私人加密方式保證資料安全。現在也不能馬上改成HTTPS協議傳輸。

最終找到以下解決辦法
在Info.plist中添加NSAppTransportSecurity類型Dictionary。
在NSAppTransportSecurity下添加NSAllowsArbitraryLoads類型Boolean,值設為YES

參考:

App Transport Security support aka apps on iOS 9 don’t work #4560
711_networking_with_nsurlsession.pdf

總結:

蘋果正在加大應用安全的管控,這個舉措可以看出蘋果對資訊安全的重視,也暴露出大部分應用傳輸資料時都是未經過加密的,或使用私人方式加密,以至於蘋果開始對開發人員提出要求。
私人加密雖然一定程度上是安全的,但是終究不是一個長久之計。全世界這麼多安全專家在維護HTTPS安全,早日使用HTTPS確保資訊安全才是王道!也省去了私人加密協議的安全隱患!

當更新xcode後,再次開啟svn他將提示xcode/develop不存在,並且讓你用xcode-select切換成你當前使用的xcode。

如下: sudo xcode-select -switch /Applications/Xcode-beta.app/

這裡的路徑是最容易出錯的,我當時就被他弄迷了 搞了好長時間 記錄這個是硬碟下的application並不是使用者裡的application,還有就是檔案名稱,盡量讓他自己提示出來,避免出錯

: Couldn’t materialize: couldn’t get the value of variable result: variable not available

Errored out in Execute, couldn’t PrepareToExecuteJITExpression
這種報錯更直觀的表現是,一句代碼一執行,所建立的對象將會立馬變成空,但不影響使用

coredata Can’t merge models with two different entities named ‘MessageModel’

這種錯誤是因為工程內部自動產生了一個.xcdatamodeld檔案,解決辦法就是 將該檔案刪除,clean,然後將軟體從測試機或真機中刪除,再運行

uitableView 不走datasource方法

代理沒掛 行數或者段數設定為0 uitableview的frame為0

Phone開發】“此認證是由未知頒發機構簽名”解決方案

問題原因:
之前在keychain(鑰匙竄訪問)中多刪了一個認證:Apple Woldwide Developer Relations Certification Authority,它是iPhone Developer認證的簽發者,如果它被刪除就會導致iPhone Developer認證被識別為未知頒發機構簽名,然後xcode中真機調試就會出現上面的錯誤。

解決辦法:
重新把AppleWWDRCA放回去;從Apple官網(http://www.apple.com/certificateauthority/)下載一個,下載後拖入keychain(鑰匙竄訪問)-登入目錄。

如果想重建認證,Apple是允許的,只要不修改App Id就Ok。

Code Sign error: No code signing identities found: No valid signing identities (i.e. certificate and private key pair) matching the team ID “E9823ESPAM” were found.

認證出現這種問題時第一反應不要認為是認證除了問題,要查看target裡的CDL與CDLtest裡面是否設定了一樣的設定檔。

A valid provisioning profile for this executable was not found. 真機調試

自從XCode支援自動維護認證之後,省去了我們手動添加裝置再更新完認證之後下載的麻煩,但一直都沒有搞明白自動維護的機制,導致經常出現XCode報錯卻不自動添加裝置,同時由於認證是XCode建立的,又無法手動修改的問題。經過一段時間的測試,終於找到瞭解決辦法,在這裡分享給大家。

正常的情況應該是:
no provisioning profile was found for this executable
然後可以選擇Fix Issue,這樣XCode就會自動為我們將新的裝置添加到認證裡,再自動更新認證。可能遇到的錯誤如下:
A valid provisioning profile for this executable was not found
解決方案是
1. 在Target的General介面中將Team改為所對應的開發人員帳號團隊
2. 在Target的Build Settings中的Code Signing Identity都改為iOS Developer(這裡不能選擇自己的),Provisioning Profile改為Automatic
3. 此時Clean之後再運行,就可以出現Fix Issue的對話方塊,選擇Fix Issue即可。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.