雖然iOS8將漸漸地無需再被兼容歪玲,但是解決問題是必須的乔夯。
最近在調(diào)試程序時,遇到以下問題:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]'
很奇怪再愈,只有iOS8的設備報了異常掂墓,說我嘗試從空數(shù)組插入空數(shù)據(jù)。
全局斷點定位在以下方法打掘。
[self presentViewController:controller animated:YES completion:nil];
于是想方設法在附近找bug按傅。一頓操作后發(fā)現(xiàn),將以上代碼中的controller
是一個橫屏的ViewController胧卤,而代碼中的self
中是一個豎屏的ViewController唯绍。在modal跳轉(zhuǎn)的時候屏幕會發(fā)生旋轉(zhuǎn),接著就異常了枝誊。
為了證明我的觀點况芒,我嘗試著把以下代碼屏蔽,發(fā)現(xiàn)的確異常消失了叶撒。
- (BOOL)shouldAutorotate {
return YES;
}
- (UIInterfaceOrientationMask) supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
如果有人也遇到了這個問題绝骚,并讀到了這里。然后各種搜索引擎“iOS8 屏幕旋轉(zhuǎn)bug”祠够。好巧压汪,我們的方向都完全錯了!
以上所有代碼都沒問題古瓤。也不是iOS8的系統(tǒng)bug止剖。
問題其實是出在self
或者self.parentViewController
或者self.parentViewController.parentViewController……
上。他們中某一個ViewController被多次modal落君。
被多次modal的方式可能是多次presentViewController穿香,多次performSegueWithIdentifier,還有在storyboard上關(guān)聯(lián)了按鈕的跳轉(zhuǎn)事件绎速,又在點擊事件里又寫了一次跳轉(zhuǎn)等等皮获。
其實問題本來很簡單,但是由于
1纹冤、iOS8以上的系統(tǒng)兼容了這個錯誤洒宝。并不會異常购公。
2、異常定位位置奇葩雁歌。
導致很容易誤導開發(fā)者宏浩。
之前也有遇到其他的異常相信以后也不會避免,在此提醒一下自己:
1将宪、不要輕易懷疑系統(tǒng)bug,99%的程序問題都是因為有問題的程序員橡庞。遇到問題應該首先定位自己的問題较坛,不要先入為主認為是別人的問題,包括系統(tǒng)bug扒最,后臺bug丑勤,底層bug等。
2吧趣、調(diào)試方法法竞。傳統(tǒng)的打斷點、寫日志等方法雖然方便强挫,但是遇到奇葩的問題往往事倍功半岔霸。屏蔽代碼,寫demo俯渤,更加有效但是相對麻煩呆细。