Xcodeで連続してメール送信をする方法

Medium 464484822

photo credit: Warm ‘n Fuzzy via photopin cc

こんばんは、ボーノです。
アプリを作っていて、連続してメール送信をしたくなったので作ってみた。

簡単に言うと、メール送信ボタンを押した直後に、また次のメール画面が表示されるというもの。
そしてそのメールを送信すると、更に次のメール画面が。。という感じ。

メール画面を呼び出す方法はgoogle先生に聞けばいくらでも出てくるけど、連続したメール送信はなかったので残しておく。

連続してメール送信をする方法

やり方はいたって簡単、viewDidAppearメソッドを使う。
このメソッドは、viewが表示される度に呼び出される。
それを利用する。

コード

ヘッダにグローバル変数としてsendCountを用意。

MainViewController.h

#import <UIKit/UIKit.h>
#import "SKPSMTPMessage.h"
#import "NSData+Base64Additions.h"

@interface MainViewController : UIViewController <SKPSMTPMessageDelegate> {
    NSInteger sendCount;
}

後は、そのsendCountに呼び出される度に1を足していく。

MainViewController.m

- (void)viewDidAppear:(BOOL)animated
{
    if (sendCount == 0){
        MFMailComposeViewController *picker = [[MFMailComposeViewController alloc]init];
        picker.mailComposeDelegate = self;
        [picker setSubject:@"タイトル1です"];
        NSArray *toRecipients = [NSArray arrayWithObject:@"mail@address"];
        [picker setToRecipients:toRecipients];
        NSString *body = @"body1 here";
        [picker setMessageBody:body isHTML:NO];
        [self presentViewController:picker animated:YES completion:nil];
        sendCount++;
    }else if (sendCount == 1){
        MFMailComposeViewController *picker = [[MFMailComposeViewController alloc]init];
        picker.mailComposeDelegate = self;
        [picker setSubject:@"タイトル2です"];
        NSArray *toRecipients = [NSArray arrayWithObject:@"mail@address"];
        [picker setToRecipients:toRecipients];
        NSString *body = @"body2 here";
        [picker setMessageBody:body isHTML:NO];
        [self presentViewController:picker animated:YES completion:nil];
        sendCount++;
    }else if (sendCount == 2){
        MFMailComposeViewController *picker = [[MFMailComposeViewController alloc]init];
        picker.mailComposeDelegate = self;
        [picker setSubject:@"タイトル3です"];
        NSArray *toRecipients = [NSArray arrayWithObject:@"mail@address"];
        [picker setToRecipients:toRecipients];
        NSString *body = @"body3 here";
        [picker setMessageBody:body isHTML:NO];
        [self presentViewController:picker animated:YES completion:nil];
        sendCount = 0; //終了
    }
}

注意

最初、別の方法でやろうとしたら下記の警告が表示されたけど理由が分からず少しはまった。
少しやり方を変え、今回の方法を取ったら出なくなった。

なんか、dismiss中に他のviewControllerを呼び出したりすると出る警告のようだ。

Warning: Attempt to present モーダル on 親のview while a presentation is in progress!

参考サイト
Warning: Attempt to present 〜 on 〜 while a presentation is in progress! | Xランカー

やってみて

実際にメール送信をしてみると、意外な程快適な事を発見。
あらかじめメールのアドレスや本文を作っておいて、大量にメール送信したい時に使えそう。
更には、送信前に少し編集を加える事もでき、使い勝手も良い。