十一、沒法調試設備「Error launching remote program: failed to get the task forprocess 6405.」編程
ad-hoc Profile不支持調試。改成development profile。xcode
十二、OTA沒法下載,提示「沒法下載應用程序」架構
.plist文件中的 bundle-identifier寫錯了(或者包含中文字符),好比:異步
<key>bundle-identifier</key>ide
<string>com.xxx.--APN--</string>異步編程
其中的com.xxx.—APN—中包含中文(「--」),應改成英文。ui
或者簽名證書是無效的。請在Orgnizer中檢測簽名證書。this
十二、ASIHTTPRequest中常常出現EXEC_BADspa
使用ASIHTTPRequest進行異步請求時,常常出現程序崩潰。尤爲在是請求過程當中(未Finished),若是你切換了視圖的時候。由於是異步請求,request對象可能在任什麼時候候調用delegate(ViewController),而此時ViewController卻可能已經釋放了。由於UIKit隨時會釋放當前不顯示的ViewController。若是你切換了ViewController,那麼那個被隱藏的ViewController隨時會被釋放。若是request回調ViewController的delegate方法時,而那個ViewController正好被UIKit給釋放,則會致使EXEC_BAD。在官方文檔中也提到:Requests don’t retain their delegates, so if there’s a chance your delegatemay be deallocated while your request is running, it is vital that you clearthe request’s delegate properties. In most circumstances, if your delegate isgoing to be deallocated, you probably also want to cancel request, since you nolonger care about the request’s status線程
所以在使用ASIHTTPRequest進行異步編程時,咱們要本身清空request的delegate屬性。在delegate(ViewController)的dealloc方法中你應該:
[request clearDelegatesAndCancel]; [request release];
固然,request不能是臨時變量,而應當是一個retained的成員對象(或者屬性),不然你沒法在dealloc方法中clearDelegatesAndCancel。
1三、Assertion failure in -[UIActionSheet showInView:]
在主線程中打開action sheet:
[selfperformSelectorOnMainThread:@selector(showActionSheet) withObject:nilwaitUntilDone:NO];
showActionSheet方法:
-(void) showActionSheet
{ sheet = [[UIActionSheet alloc] initWithTitle:@"This is my ActionSheet!" delegate:self cancelButtonTitle:@"OK"destructiveButtonTitle:@"Delete Message!" otherButtonTitles:@"Option1", @"Option 2", @"Option 3", nil];
[sheet showInView:self.view];
}
1四、RegexKitLite編譯錯誤
編譯時提示以下錯誤:
"_uregex_find", referenced from: _rkl_search in RegexKitLite.o
……
在Build Settgins的Other Linke Flag中加入
-licucore
1五、Archive時遇到「ResourceRules.plist:cannot read resources」錯誤
在build settings中找到Code Signing Resource Rules Path,填入$(SDKROOT)/ResourceRules.plist
1六、使用ZombieEnable解決EXEC_BAD_EXCESS錯誤
這個錯誤是向一個release對象發送消息致使的。能夠經過開啓ZombieEnable參數來查找真正的問題。
Edit Scheme,選擇Run …Debug,打開Arguments組,在Environment Variables中添加一個參數:
運行程序,當出現EXEC_BAD_EXCESS錯誤時,控制檯中會輸出具體出錯的信息,好比:
*** -[ITSMTicketCell release]: message sent to deallocated instance0x897e920
直接指明瞭是因爲某個對象在被釋放以後,你發送了一條消息給它。
1七、 關於Xcode4沒法調試2代代老設備的問題
升級到Xcode4之後,你會發現許多程序沒法在2代設備(有些3代設備,好比iTouch 3實際上仍然是2代的硬件)上運行了,而且Xcode4僅僅「Running…」就直接「Finished…」了,不管是Xcode控制檯仍是設備日誌中,都沒有任何提示。
注意:2代和3代的區別在於cpu架構。2代設備使用ARMv6架構cpu,3代設備使用ARMv7架構cpu。 iPhone 2G/3G,iPod 1G/2G屬於ARMv6架構(2代),iPhone3GS/4, iPod 3G,iPad屬於ARMv7架構(3代)。
stackoverflow上有關於這個的帖子,其中shapecatcher的答案是最準確的:
http://stackoverflow.com/questions/6378228/switching-from-xcode3-to-xcode4-cant-load-programs-onto-older-ipod-touch
一、打開Target的Build Settings,找到Architectures選項,將其從「$(ARCHS_STANDARD_32_BIT)」修改成「armv6$(ARCHS_STANDARD_32_BIT)」。注意大小寫是敏感的。「$(ARCHS_STANDARD_32_BIT)」是一個變量,實際上等同於armv7。
二、Base SDK不須要改變,仍然是Lastest iOS。
三、打開Target的info,找到Required device capabilities,將下面的armv7刪除。這個選項是Xcode4本身添加在工程中的默認設置,若是不去掉它,第1步-第2步的工做是沒法生效的。
1八、「Avalid provisioning profile for this device was not found.」
在你的開發證書中增長該設備的UDID。
1九、將設備添加到 portal
鏈接設備,打開Orgnizer。在設備列表中選中設備,點擊右邊窗口左下角的「Add to Portal」按鈕。或者在設備列的設備上右擊,選擇「AddDevice to Provisioning Portal」。
20、renew profile
打開Orgnizer,在LIBRARY中選擇Provisioning Profiles。在右邊窗口選擇要renew的profile,點擊右下角的「Refresh」按鈕。輸入Portal的密碼,profile將被renew。
2一、renew簽名證書及設備激活文檔
從portal移除過時的簽名證書
從新制做開發證書和發佈證書
刪除開發和部署所用的激活文檔(provisioningprofiles)
使用新的證書從新制做用於開發和部署的Provisioningprofiles
從鑰匙串中刪除老的證書
在XcodeOrganizer中安裝新的provisioning profiles
完成