メール機能を提供するためにコンデでMFMailComposeViewControllerを使用していますが、メールを送信した後、またはメールをキャンセルしたいときにクラッシュします。
以下は私のコードです:
(IBAction)FnForPlutoSupportEmailButtonPressed:(id)sender {
{
if ([MFMailComposeViewController canSendMail])
{
MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init];
mailer.mailComposeDelegate = self;
[mailer setSubject:@"Need help from Pluto support team"];
NSArray *toRecipients = [NSArray arrayWithObjects:@"support@myplu.to",nil];
[mailer setToRecipients:toRecipients];
NSString *emailBody = @"";
[mailer setMessageBody:emailBody isHTML:NO];
//mailer.modalPresentationStyle = UIModalPresentationPageSheet;
[self presentModalViewController:mailer animated:YES];
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Failure"
message:@"Your device doesn't support the composer sheet"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[alert show];
}
} }
(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
// Notifies users about errors associated with the interface
switch (result)
{ case MFMailComposeResultCancelled:
break;
case MFMailComposeResultSaved:
break;
case MFMailComposeResultSent:
break;
case MFMailComposeResultFailed:
break;
default:
break;
}
[self dismissModalViewControllerAnimated:YES];
}
私はすべてのブログ投稿を読みましたが、解決策は見つかりませんでした。このブログ投稿にはこれについての十分な説明がありますが、これにより、viewdidloadまたはviewdidappearでビューコントローラーを表示していません。
EXE_BAD_ACCESSを取得しています。クラッシュログは次のとおりです。
****
> #0 0x00000000 in ?? ()
> #1 0x01dc5aa4 in -[UIViewController _setViewAppearState:isAnimating:] ()
> #2 0x01dc5f47 in -[UIViewController __viewDidDisappear:] ()
> #3 0x01dc6039 in -[UIViewController _endAppearanceTransition:] ()
> #4 0x01dd2e7e in -[UIViewController(UIContainerViewControllerProtectedMethods) endAppearanceTransition] ()
> #5 0x01fc8de1 in -[UIWindowController transitionViewDidComplete:fromView:toView:] ()
> #6 0x01da334b in -[UITransitionView notifyDidCompleteTransition:] ()
> #7 0x01da3070 in -[UITransitionView _didCompleteTransition:] ()
> #8 0x01da531b in -[UITransitionView _transitionDidStop:finished:] ()
> #9 0x01d23fb6 in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] ()
> #10 0x01d24154 in -[UIViewAnimationState animationDidStop:finished:] ()
> #11 0x0163bbce in CA::Layer::run_animation_callbacks ()
> #12 0x03664fe4 in _dispatch_client_callout ()
> #13 0x03655997 in _dispatch_main_queue_callback_4CF ()
> #14 0x012c03b5 in __CFRunLoopRun ()
> #15 0x012bf804 in CFRunLoopRunSpecific ()
> #16 0x012bf6db in CFRunLoopRunInMode ()
> #17 0x030f1913 in GSEventRunModal ()
> #18 0x030f1798 in GSEventRun ()
> #19 0x01ce82c1 in UIApplicationMain ()
****
iOS 5用のアップルの更新されたドキュメントによると、彼らは言及しました:
presentModalViewController:animated:
指定されたViewControllerによって管理されるモーダルビューをユーザーに提示します。(非推奨。presentViewController:animated:completion:
代わりに使用してください。)
- (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated
Parameters
受信者によって提示されたビューコントローラを閉じます。(非推奨。dismissViewControllerAnimated:completion:
代わりに使用してください。)
- (void)dismissModalViewControllerAnimated:(BOOL)animated
私もこれを試しましたが、それでもクラッシュします