0

アプリ内のCSVファイルを取得して添付ファイルとして送信する小さなスクリプトをxcodeで作成しました。メールボタンをクリックすると、すべてが機能します(つまり、件名、本文など)。CSVファイルも表示されますが、メールを確認すると、csvファイル以外のすべてが表示されます。私は困惑しています。これが私が使用するコードです。filename:@"isitlist.csvも試しました。csvファイルはメインフォルダーにあります。

if ([MFMailComposeViewController canSendMail])
{
    MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init];

    mailer.mailComposeDelegate = self;

    [mailer setSubject:@"Guest List Form"];

    NSArray *toRecipients = [NSArray arrayWithObjects:@"", nil];
    [mailer setToRecipients:toRecipients];

    [mailer addAttachmentData:[NSData dataWithContentsOfFile:@"isit_list.csv"]
                     mimeType:@"text/csv"
                     fileName:@"isit_list"];

    [self presentModalViewController:mailer animated:YES];

    NSString *emailBody = @"Please fill out the attached file and then email it back to us. Also, please attach some photos to use for the slideshow. We suggest no more than 10.";
    [mailer setMessageBody:emailBody isHTML:NO];

    // only for iPad
    // mailer.modalPresentationStyle = UIModalPresentationPageSheet;

    [self presentModalViewController:mailer animated:YES];

    [mailer release];
4

2 に答える 2

0

これをviewcontroller.mに追加します

MessageUI/MFMailComposeViewController.hをインポートします

MessageUI/MessageUI.hをインポートします

次に、これを追加します。

-(IBAction)Send:(id)sender; {{

if ([MFMailComposeViewController canSendMail])
{
    
    NSString *textFileContentsString = @"Last Name (i.e. Smith), First Name (i.e. Mr and Mrs. James), Table Number (i.e. 7)\nJones,Mr and Mrs Steve, 6\nJames,Mr and Mrs Albert,8\nJohnson, Mr and Mrs Fred, 7";
    NSData *textFileContentsData = [textFileContentsString dataUsingEncoding:NSASCIIStringEncoding];
    MFMailComposeViewController *mailComposeViewController = [[MFMailComposeViewController alloc] init];
    mailComposeViewController.mailComposeDelegate = self;
     NSArray *toRecipients = [NSArray arrayWithObject:@""];
    [mailComposeViewController setSubject:@"My Sample Project"];
    [mailComposeViewController setMessageBody:@"Send this email to the email address that you use on the iPad. When you open it in your email you will first save the photos to your camera roll by pressing and holding on the image. Then you will press on the isit_list.csv file and click on 'Open in iSIT'. You will then see a message that the data has been imported. You will then create your event by pressing on 'Enter Seating Admin'. Enter in the Couple's Names, Event Date, Select Photos (these are photos for the slideshow), then click 'Save Event'. You will notice the event is saved. To start the event click on 'Load Event', select a Theme to use, then click 'Launch Event'. The sample data in the CSV file only contains a few names which all have a last name that start with'J'. So click on 'J' when you see the alphabet screen. " isHTML:NO];
    [mailComposeViewController addAttachmentData:textFileContentsData mimeType:@"text/plain" fileName:@"isit_list.csv"];

    [mailComposeViewController setToRecipients:toRecipients];
    [self presentModalViewController:mailComposeViewController 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];

}

}

于 2013-03-21T02:02:00.137 に答える
0

私は今、あなたと同じ問題に直面しています。解決策を探しているうちに、iOS と Mac OS の 1 つの特異性を発見しました。

ファイルを送信できない理由は非常に単純です。アプリ バンドルまたは iOS ドキュメント フォルダにファイルを作成することが許可されていないためです。

たとえば、ファイルを作成して XCODE のアプリ フォルダーに挿入すると、それを mailComposeViewController の添付ファイルとして使用すると、期待どおりにファイルを含むメールが届きます。ここでストレスの多い部分は、アプリ内のファイルの内容を更新することさえできないことです。

Xcode を使用してテストを行い、多くの NSLOG を使用してコードとデータ フローを追跡すると、コードが Mac OS で動作する可能性が高いことがわかりますが、デバイスでシミュレーションを実行すると、完全に異なることがわかります。シナリオ。

iOS の SANDBOX は、主にユーザー情報を保護するために、この種の操作を禁止しています。しかし、希望はあります!

アプリ内で生成されたデータを共有する解決策の 1 つは、この情報を NSString として MailComposerViewController に渡すことです。この方法では、必要なデータを送信できません。

ええええ...これはエレガントではありませんが、これまでのところ得られたものです。

デバイスを脱獄せずにこれを行う方法を発見した場合は、それを私たちと共有してください。

于 2013-03-14T20:31:44.147 に答える