[MFMailComposeViewController canSendMail]
メールアカウントが作成/削除された後、アプリケーションがバックグラウンドからウェイクアップすると間違った値を返すことがわかりました。
私のアプリケーションには、メールが利用可能な場合にのみ関連する機能がいくつかあります。したがって、canSendMail チェックで使用する可能性を無効にしたいと考えています。
次のシナリオではなく、すべてがうまく機能します。3. ホームボタンを押して設定を開きます。メールアカウントを作成して設定します。4. アプリケーションに戻る - [MFMailComposeViewController canSendMail]
NO を返しますが、メール アカウントは設定されています。5. ホーム ボタンを押してから、もう一度アプリケーションに[MFMailComposeViewController canSendMail]
戻ります。必要に応じて YES が返されます。
また、アプリケーションを開いて設定に移動し、メール アカウントを削除して、アプリケーションに戻ると、この動作は再現可能です。canSendMail は、削除後に最初にアプリケーションを開いた場合は YES を返し、2 つ目のアプリケーションでは必要に応じて NO を返します。
[MFMailComposeViewController canSendMail]
ApplicationDelegate の- (void)applicationWillEnterForeground:(UIApplication *)application
機能をチェックしています。
MFMailComposeViewController は値を格納しているように思えますが、メールの可用性を強制的に再読み取りするイベントがあります。また、適切なスレッドで待機(1〜2秒)を追加するか、メールのセットアップとアプリの実行の間に他のアプリケーションを実行しようとしましたが、何も役に立ちません。
canSendMail の適切な値を取得する方法について何かアイデアはありますか? そうでなければ、唯一の方法は、このバグを見つけた QA を殺すことです...
また、次のコードも機能しません。
Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
if (mailClass != nil)
{
return [mailClass canSendMail];
}
return NO;
なにか提案を?