Application tried to present a nil modal view controller on target 問題
MFMailComposeViewController を使ってメール送信ダイアログを表示しようとしたところ、Application tried to present a nil modal view controller on target が発生してアプリが強制終了されてしまう問題に遭遇。
に書いてあるとおり、MFMailComposeViewController の canSendMail を使って、端末からメールを送れる状態であるかを確認する必要がある。
テスト用端末や Simulator だとメールの設定をしていないことも多いと思うので、遭遇することがありそうだ。
Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
if (mailClass != nil) {
MFMailComposeViewController * mailView = [[MFMailComposeViewController alloc] init];
mailView.mailComposeDelegate = self;
//Set the subject
[mailView setSubject:emailSubject];
//Set the mail body
[mailView setMessageBody:emailBody isHTML:YES];
//Display Email Composer
if([mailClass canSendMail]) {
[self.navControl presentModalViewController:mailView animated:YES];
}
}
ちなみに、メールを送信できない環境である場合自動的にダイアログが表示される。

さらにちなみに、SMSを送りたい場合は MFMessageComposeViewController を使い、その場合送信可能かどうかは canSendText を使うとのこと。
上記のStack Overflow の質問では、メールを送信したいのにこちらが使われていたので、二重に間違っていたことになる。
関連記事
-
-
Apple Event Sep 2022 Far Out
毎年恒例の Apple Event が 2022/09/07 に行われた。日本時間は 9/8 2:
-
-
[iOS SDK] UIAlertView が消えた後にキーボードが表示される
昔書いたコードで、UIAlertView に setAlertViewStyle で UIAlert
-
-
iPhoneアプリにAboutBoxを実装
iPhoneアプリにAboutBoxを実装するためのメモ。 今回、自分のiPhoneアプリにAbou
-
-
[iPhone SDK] Apple Push Notification を利用したアプリをサポートする Easy APNS
以前 apns-php を使ってApple Push Notification を実行する話を書いた
-
-
コードちゃん 1.1.0 で五度圏学習機能をサポート → 新アプリに分離しました
お知らせ ほとんど使われていないのと、1.2.0でコード進行問題を追加したため、1.2.0
-
-
無料版アプリの効果について
最近いくつかiPhoneアプリの無料版の提供に関してのブログが上がって、考えさせられている。 fla
-
-
[WatchKit] How to update complications
Apple Watch の文字盤上に、自分のアプリの情報を載せることができる仕組みが、Complic
-
-
ドラムちゃんに電子ドラムiWordを接続する
ドラム譜学習アプリ「ドラムちゃん」に、安価なMIDI電子ドラム iWord を接続する方法を説明し
-
-
はじめてのiPhoneプログラミング
さらにiPhoneプログラミング本が出るらしい。出版ラッシュですな。 これは568ページもあるらしい
-
-
[iPhone SDK] ネットワーク接続の有無を確認する方法
iPhoneでネットワーク接続できないときには一応エラーダイアログを出す方がよいだろうと考えて方法を