Уволить MFMailCompose экран в iOS 9 - отлично работает в iOS 8

Я реализовал MFMailComposeViewController почти во всех моих предыдущих приложениях для iOS, и у меня никогда не было этой проблемы раньше. Мой код отлично работает в iOS 8 и сразу же закрывает экран электронной почты, но в iOS 9 он не работает. Моя HTML-строка также верна и составляет правильное тело сообщения электронной почты.

На устройстве iOS 8, когда я нажимаю кнопку электронной почты, открывается экран создания электронной почты. Я могу сохранить черновик / отменить электронную почту / отправить электронную почту, и он сразу же закрывает экран электронной почты и возвращается на экран, содержащий кнопку электронной почты.

В то время как на устройстве iOS 9 я могу открыть экран создания электронной почты, и он показывает правильную тему и текст сообщения электронной почты, но когда я нажимаю сохранить черновик / отменить электронную почту / отправить электронную почту, то он никогда не закрывает экран создания электронной почты.

Я не вижу ошибок в моем коде. Apple изменила что-то в iOS 9, что не позволяет моему коду работать?

//.h file

#import <UIKit/UIKit.h>

#import <MessageUI/MessageUI.h>
#import <MessageUI/MFMailComposeViewController.h>

@interface ViewController : UIViewController<MFMailComposeViewControllerDelegate>{


}

@property(nonatomic,assign) id<MFMailComposeViewControllerDelegate> mailComposeDelegate;


- (IBAction)emailThisAdToFriends:(id)sender;


@end

Вот мой код.m файла

#import "ViewController.h”

@interface ViewController ()
@end

@implementation ViewController

NSString *finalEmailString;

- (void)viewDidLoad {
    [super viewDidLoad];

}


-(void)createStringToEmail {

   //create finalEmailString which is HTML Code    

   //html code 

  }


- (IBAction)emailThisAdToFriends:(id)sender {

     //compose email string --(finalEmailString)

     [self createStringToEmail];


    if ([MFMailComposeViewController canSendMail])
    {

        MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
        mailViewController.mailComposeDelegate = self;
        [mailViewController setSubject:@“mySubject”];
        [mailViewController setMessageBody:finalEmailString isHTML:YES];

        //present controller

        UIViewController *controller = self.view.window.rootViewController;

        [controller presentViewController:mailViewController animated: YES completion:nil];


    }
    else
    {
        NSLog(@"Device unable to send mail");
    }

}


- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    switch (result) {
    case MFMailComposeResultSent:
    {

        NSLog(@“Sent email.");

        break;
    }

    case MFMailComposeResultSaved:
    {

        NSLog(@"saved draft");

        break;
    }

    case MFMailComposeResultCancelled:
    {


        NSLog(@"cancelled");

        break;
    }

    case MFMailComposeResultFailed:
    {

        NSLog(@"Mail failed");

        break;
    }

    default:
    {

        NSLog(@"An error occurred “);

        break;
    }
}

//dismiss email compose screen

 UIViewController *dismissController = self.view.window.rootViewController;

[dismissController dismissViewControllerAnimated:YES completion:NULL];

}

@end

Любая помощь приветствуется.

Благодарю.

1 ответ

Попробуйте заменить:

UIViewController *controller = self.view.window.rootViewController;

[controller presentViewController:mailViewController animated: YES completion:nil];

С:

[self presentViewController:mailViewController animated:YES completion:NULL];

А также

UIViewController *dismissController = self.view.window.rootViewController;

[dismissController dismissViewControllerAnimated:YES completion:NULL];

С:

[self dismissViewControllerAnimated:YES completion:NULL];
Другие вопросы по тегам