[UIPickerTableView _createPreparedCellForGlobalRow: withIndexPath: willDisplay:]

UIDatePickerの不特定なクラッシュ

UIDatePickerを使用していて、何度も表示/非表示を繰り返していると以下のエラーが発生しクラッシュする時があった。

  • 2xxx-xx-xx xx:xx:xx.xxx xxxxxxxx[xxxxx:xxxxxxx] *** Assertion failure in -[UIPickerTableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.60.7/UITableView.m:xxxxx
  • 2xxx-xx-xx xx:xx:xx.xxx xxxxxxxx[xxxxx:xxxxxxx] CRASH: UITableView dataSource is not set
  • ...

トラブルが起こるviewControllerのviewDidLayoutSubviewsメソッドをオーバーライドし以下の行を追加することで解決

-(void)viewDidLayoutSubviews {

[superviewDidLayoutSubviews];

[self.viewlayoutIfNeeded]; //この行の追加で解決

}

参考:[iOS]viewDidLayoutSubviewsの最後にはlayoutSubviewsを呼び出そう