今まで遭遇したことがなかったエラーなので、未だ奮闘中です。
Objective-C
で開発中の iPad アプリを実行したところ、UIAlertController
を表示するタイミングでクラッシュするバグの対処方法についてです。
実は発見した参考サイトは私の状況とはマッチしていないので、解決には至っていないのですが、これも今後使いそうなので、備忘録としてまとめ。
参考にさせていただいた記事はこちらから。
UIAlertControllerをiPadで使用する際の注意点 – Qiita
https://qiita.com/ShingoFukuyama/items/c3c83c552292dcb49457
さて、対処法ですが、まず前提として、スタイルに UIAlertControllerStyleActionSheet
が指定されている必要があります。
で、この状況でタイトルやボタンなどを設定後、iPad で実行するとクラッシュします。
原因は UIAlertController
の popoverPresentationController
プロパティを指定していないことなので、これらを指定します。
サンプルコードは下記の通りです。
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"タイトル" message:@"メッセージ" preferredStyle:UIAlertControllerStyleActionSheet]; [alertController addAction:[UIAlertAction actionWithTitle:@"ボタン" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { // ボタンをタップした時の処理 }]]; // iPad で実行する時に必要な設定 alertController.popoverPresentationController.sourceView = self.view; alertController.popoverPresentationController.sourceRect = CGRectMake(100.0, 100.0, 20.0, 20.0); [self presentViewController:alertController animated:YES completion:^{}];
なお、追加する必要があるのが 10、11行目の popoverPresentationController
プロパティの指定です。
この2行を指定して実行すると、iPad でもクラッシュすることなく UIAlertController を表示することができました!
ただ、サンプルコードのままだと、アラートが表示される位置が画面の左上になってしまうので、こちらはアプリのレイアウトに合わせて適宜調整してください。
こんな感じで、アラートのスタイルに ActionSheet
を利用している場合は、こちらの対処方法が使えます。
が、私が表示したいのは通常のアラートでして…。
ダメ元で上記の popoverPresentationController
プロパティの指定を追加してみましたが、やっぱりダメでした。
ということで、他の心当たりもあたってみたいと思います。
もしわかったら、また記事にまとめます。
以上、Objective-C で開発した iPad アプリで UIAlertController がクラッシュする時の対処法についてでした。
ご参考になれば幸いです。