蘋果iOS9推出也有一段時間了,原本覺得應該很穩定吧,但事實卻不是這樣。一日將iOS 8上運行得很良好的App在一臺iOS 9.3設備上調試,卻發現了很奇葩的問題:不能釋放鍵盤。html
跟蹤調試,發現只要代碼中一運行到resignFirstResponder(或者是endEditing)方法調用的地方,程序就崩潰。出現神通常的BAD EXEC錯誤。spa
將這句代碼註釋,一切OK,可是你就沒法收起軟鍵盤了。.net
在網上搜羅答案無數,只有一個答案是靠譜的:調試
http://www.dahuatu.com/1LypEbbMmn.htmlorm
接下來,讓咱們來演示一下這個Bug,你就會明白讓一個在iOS 8上運行正常的App崩潰是如此的容易。htm
新建工程。在View Controller上拖一個TextField和Button。爲Button建立一個IBAction鏈接:get
- (IBAction)freekb:(id)sender {it
[self.view endEditing:YES];io
}class
其它代碼什麼都不要寫。運行程序(在iOS 9.1模擬器或設備上),點擊TextField,鍵盤彈出,點擊Button,鍵盤收起。一切OK,沒有任何問題。
如今咱們來看怎麼弄死它。實現一個Category,隨便你叫它什麼(好比test):
@implementation UIViewController(test)
- (void)dealloc{
}
如你所見,只定義了一個空的dealloc方法,方法中什麼代碼也不用寫。
運行程序(在iOS 9.1模擬器或設備上),點擊TextField,鍵盤彈出,點擊Button,鍵盤收起。程序崩潰!刪除dealloc方法,再次運行,一切正常。
Ok,演示完畢,謝謝你們!