UIAlertControllerでAssertion failureが出た。

*** Assertion failure in -[UIAlertController addAction:], /SourceCache/UIKit/UIKit-3347.44/UIAlertController.m:121

UIAlertView→UIAlertControllerをやっていて、こんなのが出てしばらくハマったのでメモ。
結論から言うと、styleがUIAlertActionStyleCancelのactionは2つ以上addしてはいけない。

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"タイトル"
                                                               message:@"メッセージ"
                                                        preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"キャンセル"
                                          style:UIAlertActionStyleCancel
                                        handler:^(UIAlertAction *action) {
                                          // キャンセルなんとか
                                        }]];
[alert addAction:[UIAlertAction actionWithTitle:@"OK"
                                          style:UIAlertActionStyleCancel
                                        handler:^(UIAlertAction *action) {
                                          // OKなんとか
                                        }]];

パッと見で気が付かないよ・・・。
2つめの「UIAlertActionStyleCancel」は「UIAlertActionStyleDefault」か「UIAlertActionStyleDestructive」にしましょう。
アサーションならもうちょっとメッセージに情報が欲しいなぁ。

タイトルとURLをコピーしました