4

さまざまなBaseSDK用にビルドすると、このコードに問題が発生します。

MFMailComposeViewController *mail = nil;
mail = [[MFMailComposeViewController alloc] init];
NSString *description = @"Some mail string";
if([MFMailComposeViewController canSendMail])
{
    mail.mailComposeDelegate =self;
    [mail setSubject:story.title];
    [mail setMessageBody:[NSString stringWithFormat:(NSString *)kMessageBodyFormat,description,story.webLink] isHTML:NO];
}
[self presentModalViewController:mail animated:YES];
[mail release];
mail=nil;

Base SDK 3.0でビルドしたときにMFMailComposeViewController's、ユーザーがメールアカウントを持っていない場合に発生する初期化でnilが返された場合、システムによってデフォルトの「メールアカウントがありません」というアラートが表示されます。

しかし、Base SDK4.0でビルドして3.0OSにデプロイすると、ユーザーがメールアカウントを持っていない場合、同じアラートがシステムに表示されず、代わりにpresentModalViewControllerクラッシュします。

MFMailComposeViewController'sユーザーが3.0と4.0の両方のベースSDKにメールアカウントを持っていない場合、初期化はnilを返しますがpresentModalViewController、SDK 3.0の場合はどこかでインテリジェントにアラートを出しますが、3.0にデプロイされたSDK4.0は失敗してクラッシュします。

誰かがこの問題に直面したことがありますか/実際に何が起こっているのか考えていますか。

ありがとう、ラジ

4

2 に答える 2

8

同じ問題を抱えているときにこの質問を見つけました。

電話にメールアカウントが設定されていないためだと思います。[[MFMailComposeViewController alloc] init]返品ゼロ。

したがって、View Controller を表示する前に、それが nil かどうかを確認する必要があります。

于 2011-10-16T21:11:11.047 に答える
7

iOS 4 でベータ テストを行っていたところ、あなたの投稿に出会いました。なぜ return nil なのかわからなかったので、答えてくれてありがとう。あなたの質問への回答に関しては、それが nil かどうかを確認するだけです。nil の場合、モーダル ビュー コントローラーを提示しません。ポップアップは引き続き表示されます。

于 2010-06-21T20:50:07.523 に答える