2

iOSアプリでメールを送ろうとしています。

これは方法です:

    MFMailComposeViewController  *picker = [[MFMailComposeViewController  alloc] init];
    picker.mailComposeDelegate = self;

    [picker setSubject:@"Reclutamento pompieri"];

    // Set up the recipients.
    NSArray *toRecipients = [NSArray arrayWithObjects:@"test@gmail.com",nil];

    [picker setToRecipients:toRecipients];


    testoMail = [NSMutableString stringWithFormat: @"This is a test"];

    [picker setMessageBody:testoMail isHTML:YES]; //HTML!!!!!!

        [self presentViewController:picker animated:YES completion:nil];

//*******************************************************************************************

     // The mail compose view controller delegate method
            - (void)mailComposeController:(MFMailComposeViewController *)controller //**ERROR STAYS HERE**
            didFinishWithResult:(MFMailComposeResult)result
            error:(NSError *)error
            {
                [self dismissModalViewControllerAnimated:YES]

;

しかし、デバッガーは「宣言されていない識別子を使用しました」mailComposerControllerと言います

意味がわかりません。手伝って頂けますか?

どうもありがとう

PS。ヘッダーは次のとおりです。

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

@interface Reclutamento : UIViewController <MFMailComposeViewControllerDelegate>
{

}

- (void)sendMail;

@end

完全な .h コードは

//
//  Reclutamento.h
//  Pompieri
//
//  Created by Reda Bousbah on 15.01.13.
//  Copyright (c) 2013 Reda Bousbah. All rights reserved.
//

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

@interface Reclutamento : UIViewController <MFMailComposeViewControllerDelegate>
{
    UITextField *nameTextField;
    UITextField *surnameTextField;
    UITextField *bornDateTextField;
    UITextField *addressTextField;
    UITextField *zipTextField;
    UITextField *emailTextField;

    MFMailComposeViewController *email;
}

@property (nonatomic, retain) MFMailComposeViewController *email;

@property(nonatomic,retain) IBOutlet UITextField *nameTextField;
@property(nonatomic,retain) IBOutlet UITextField *surnameTextField;
@property(nonatomic,retain) IBOutlet UITextField *bornDateTextField;
@property(nonatomic,retain) IBOutlet UITextField *addressTextField;
@property(nonatomic,retain) IBOutlet UITextField *zipTextField;
@property(nonatomic,retain) IBOutlet UITextField *emailTextField;

@property NSString *name;
@property NSString *surname;
@property NSString *bornDate;
@property NSString *address;
@property NSString *zipCode;
@property NSString *miaEmail;


- (IBAction)checkData:(id)sender;
- (IBAction)backgroundTap:(id)sender;
- (IBAction)doneButtonPressed:(id)sender;

- (void)sendMail;

@end

実装ファイルは

//
//  Reclutamento.m
//  Pompieri
//
//  Created by Reda Bousbah on 15.01.13.
//  Copyright (c) 2013 Reda Bousbah. All rights reserved.
//

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

@interface Reclutamento ()

@end


@implementation Reclutamento

@synthesize nameTextField, surnameTextField, bornDateTextField, addressTextField, zipTextField, emailTextField;
@synthesize name, surname, bornDate, address, zipCode, miaEmail;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    nameTextField.text = nil;
    surnameTextField.text = nil;
    bornDateTextField.text = nil;
    addressTextField.text = nil;
    zipTextField.text = nil;
    emailTextField.text = nil;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

#pragma - getting info from the UI

//NSString *test = nil;


- (IBAction)checkData:(id)sender
{
    /*
    name = nameTextField.text;
    surname = surnameTextField.text;
    bornDate = bornDateTextField.text;
    address = addressTextField.text;
    zipCode = zipTextField.text;
    email = emailTextField.text;
    */

    //NSLog(@" Nome: %@ \n Cognome: %@ \n Data di nascita: %@ \n Indirizzo: %@ \n Zip: %@ \n email: %@ \n", name, surname, bornDate, address, zipCode, email);

    unsigned int x,a = 0;
    NSMutableString *messaggioErrore; //stringa variabile
    messaggioErrore = [NSMutableString stringWithFormat: @""]; //le stringhe mutabili vanno inizializzate in questo modo!


    for (x=0; x<6; x++)
    {
        switch (x) {
            case 0:
                if (nameTextField.text == nil) {
                    [messaggioErrore appendString:@"Nome, "];
                    a=1;

                }
                break;

            case 1:
                if (surnameTextField.text == nil)
                {
                    [messaggioErrore appendString:@"Cognome, "];
                    a=1;
                }
                break;

            case 2:
                if (bornDateTextField.text == nil)
                {
                    [messaggioErrore appendString:@"Data di nascita, "];
                    a=1;
                }
                break;

            case 3:
                if (addressTextField.text == nil)
                {
                    [messaggioErrore appendString:@"Indirizzo, "];
                    a=1;
                }
                break;

            case 4:
                if (zipTextField.text == nil)
                {
                    [messaggioErrore appendString:@"Zip Code, "];
                    a=1;
                }
                break;

            case 5:
                if (emailTextField.text == nil)
                {
                    [messaggioErrore appendString:@"Email, "];
                    a=1;
                }
                break;

            default:
                break;
        }

    }

    NSLog (@"Messaggio errore: %@", messaggioErrore);

     if (a == 1) {

         NSMutableString  *popupErrore;
         popupErrore = [NSMutableString stringWithFormat: @"Per inviare compilare i seguenti campi:  "];

         [popupErrore appendString:messaggioErrore]; //aggiungo i miei errori
         [popupErrore appendString: @" grazie della comprensione."]; //

         NSLog(@"%@", popupErrore);

        UIAlertView *chiamataEffettuata = [[UIAlertView alloc]
                                           initWithTitle:@"ATTENZIONE" //titolo del mio foglio
                                           message:popupErrore
                                           delegate:self
                                           cancelButtonTitle:@"Ok, correggo" //bottone con cui si chiude il messaggio
                                           otherButtonTitles:nil, nil];
        [chiamataEffettuata show]; //istanza per mostrare effettivamente il messaggio
     }

    else
    {
        name = nameTextField.text;
        surname = surnameTextField.text;
        bornDate = bornDateTextField.text;
        address = addressTextField.text;
        zipCode = zipTextField.text;
        email = emailTextField.text;

        NSMutableString *datiUtente;
        datiUtente = [NSMutableString stringWithFormat: @"<br><br> <b>Nome:</b> %@ <br> <b>Cognome:</b> %@ <br> <b>Data di nascita:</b> %@ <br> <b>Indirizzo:</b> %@ <br> <b>Zip:</b> %@ <br> <b>Email:</b> %@ <br>", name, surname, bornDate, address, zipCode, miaEmail];

        NSLog(@"Dati utente: %@", datiUtente);

        NSMutableString *testoMail;
        testoMail = [NSMutableString stringWithFormat: @"Salve, questa mail è stata generata automaticamente dalla applicazione per iPhone ''<b>Pompieri Locarno</b>'' <br> i dati relativi all'utente sono: %@", datiUtente];

        NSLog(@"%@", testoMail);


        //MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
        MFMailComposeViewController  *picker = [[MFMailComposeViewController  alloc] init];
        picker.mailComposeDelegate = self;

        [picker setSubject:@"Reclutamento pompieri"];

        // Set up the recipients.
        NSArray *toRecipients = [NSArray arrayWithObjects:@"youporn@gmail.com",nil];

        //NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com",@"third@example.com", nil];
        //NSArray *bccRecipients = [NSArray arrayWithObjects:@"four@example.com",nil];

        [picker setToRecipients:toRecipients];
        //[picker setCcRecipients:ccRecipients];
        //[picker setBccRecipients:bccRecipients];

        // Attach an image to the email.
        //NSString *path = [[NSBundle mainBundle] pathForResource:@"ipodnano" ofType:@"png"];
        //NSData *myData = [NSData dataWithContentsOfFile:path];
        //[picker addAttachmentData:myData mimeType:@"image/png" fileName:@"ipodnano"];

        // Fill out the email body text.
        //NSMutableString *emailBody;
        testoMail = [NSMutableString stringWithFormat: @"%@", testoMail];

        [picker setMessageBody:testoMail isHTML:YES]; //HTML!!!!!!

        // Present the mail composition interface.
        [self presentViewController:picker animated:YES completion:nil];

        // The mail compose view controller delegate method
        - (void)mailComposeController:(MFMailComposeViewController *)controller
        didFinishWithResult:(MFMailComposeResult)result
        error:(NSError *)error
        {
            [self dismissModalViewControllerAnimated:YES];
        }
    }
}

#pragma mark - Mandare email
/*
- (void)sendMail:(NSMutableString*)testoMail{

    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
    picker.mailComposeDelegate = self;

    [picker setSubject:@"Reclutamento pompieri"];

    // Set up the recipients.
    NSArray *toRecipients = [NSArray arrayWithObjects:@"reda.bousbah@gmail.com",nil];
    //NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com",@"third@example.com", nil];
    //NSArray *bccRecipients = [NSArray arrayWithObjects:@"four@example.com",nil];

    [picker setToRecipients:toRecipients];
    //[picker setCcRecipients:ccRecipients];
    //[picker setBccRecipients:bccRecipients];

    // Attach an image to the email.
    //NSString *path = [[NSBundle mainBundle] pathForResource:@"ipodnano" ofType:@"png"];
    //NSData *myData = [NSData dataWithContentsOfFile:path];
    //[picker addAttachmentData:myData mimeType:@"image/png" fileName:@"ipodnano"];

    // Fill out the email body text.
    NSString *emailBody = @"It is raining in sunny California!";
    [picker setMessageBody:emailBody isHTML:NO];

    // Present the mail composition interface.
    [self presentViewController:picker animated:YES completion:nil];


}
*/

#pragma mark - methods to control the keyboard

- (IBAction)backgroundTap:(id)sender //method for resign the keyboard when the background is tapped
{
    [nameTextField resignFirstResponder];
    [surnameTextField resignFirstResponder];
    [bornDateTextField resignFirstResponder];
    [addressTextField resignFirstResponder];
    [zipTextField resignFirstResponder];
    [emailTextField resignFirstResponder];

}

- (IBAction)doneButtonPressed:(id)sender
{
    NSLog( @"done button pressed");
    [sender resignFirstResponder];
}

@end
4

3 に答える 3

3

- (void)mailComposeController:(MFMailComposeViewController *)controllerメソッド内で定義しているようです。
これはメソッドの外で定義してください。


編集

私が言ったように、メソッドの外に定義を移動します。これが完全に正しい.mファイルです

//
//  Reclutamento.m
//  Pompieri
//
//  Created by Reda Bousbah on 15.01.13.
//  Copyright (c) 2013 Reda Bousbah. All rights reserved.
//

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

@interface Reclutamento ()

@end


@implementation Reclutamento

@synthesize nameTextField, surnameTextField, bornDateTextField, addressTextField, zipTextField, emailTextField;
@synthesize name, surname, bornDate, address, zipCode, miaEmail;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    nameTextField.text = nil;
    surnameTextField.text = nil;
    bornDateTextField.text = nil;
    addressTextField.text = nil;
    zipTextField.text = nil;
    emailTextField.text = nil;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

#pragma - getting info from the UI

//NSString *test = nil;


- (IBAction)checkData:(id)sender
{
    /*
     name = nameTextField.text;
     surname = surnameTextField.text;
     bornDate = bornDateTextField.text;
     address = addressTextField.text;
     zipCode = zipTextField.text;
     email = emailTextField.text;
     */

    //NSLog(@" Nome: %@ \n Cognome: %@ \n Data di nascita: %@ \n Indirizzo: %@ \n Zip: %@ \n email: %@ \n", name, surname, bornDate, address, zipCode, email);

    unsigned int x,a = 0;
    NSMutableString *messaggioErrore; //stringa variabile
    messaggioErrore = [NSMutableString stringWithFormat: @""]; //le stringhe mutabili vanno inizializzate in questo modo!


    for (x=0; x<6; x++)
    {
        switch (x) {
            case 0:
                if (nameTextField.text == nil) {
                    [messaggioErrore appendString:@"Nome, "];
                    a=1;

                }
                break;

            case 1:
                if (surnameTextField.text == nil)
                {
                    [messaggioErrore appendString:@"Cognome, "];
                    a=1;
                }
                break;

            case 2:
                if (bornDateTextField.text == nil)
                {
                    [messaggioErrore appendString:@"Data di nascita, "];
                    a=1;
                }
                break;

            case 3:
                if (addressTextField.text == nil)
                {
                    [messaggioErrore appendString:@"Indirizzo, "];
                    a=1;
                }
                break;

            case 4:
                if (zipTextField.text == nil)
                {
                    [messaggioErrore appendString:@"Zip Code, "];
                    a=1;
                }
                break;

            case 5:
                if (emailTextField.text == nil)
                {
                    [messaggioErrore appendString:@"Email, "];
                    a=1;
                }
                break;

            default:
                break;
        }

    }

    NSLog (@"Messaggio errore: %@", messaggioErrore);

    if (a == 1) {

        NSMutableString  *popupErrore;
        popupErrore = [NSMutableString stringWithFormat: @"Per inviare compilare i seguenti campi:  "];

        [popupErrore appendString:messaggioErrore]; //aggiungo i miei errori
        [popupErrore appendString: @" grazie della comprensione."]; //

        NSLog(@"%@", popupErrore);

        UIAlertView *chiamataEffettuata = [[UIAlertView alloc]
                                           initWithTitle:@"ATTENZIONE" //titolo del mio foglio
                                           message:popupErrore
                                           delegate:self
                                           cancelButtonTitle:@"Ok, correggo" //bottone con cui si chiude il messaggio
                                           otherButtonTitles:nil, nil];
        [chiamataEffettuata show]; //istanza per mostrare effettivamente il messaggio
    }

    else
    {
        name = nameTextField.text;
        surname = surnameTextField.text;
        bornDate = bornDateTextField.text;
        address = addressTextField.text;
        zipCode = zipTextField.text;
        email = emailTextField.text;

        NSMutableString *datiUtente;
        datiUtente = [NSMutableString stringWithFormat: @"<br><br> <b>Nome:</b> %@ <br> <b>Cognome:</b> %@ <br> <b>Data di nascita:</b> %@ <br> <b>Indirizzo:</b> %@ <br> <b>Zip:</b> %@ <br> <b>Email:</b> %@ <br>", name, surname, bornDate, address, zipCode, miaEmail];

        NSLog(@"Dati utente: %@", datiUtente);

        NSMutableString *testoMail;
        testoMail = [NSMutableString stringWithFormat: @"Salve, questa mail è stata generata automaticamente dalla applicazione per iPhone ''<b>Pompieri Locarno</b>'' <br> i dati relativi all'utente sono: %@", datiUtente];

        NSLog(@"%@", testoMail);


        //MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
        MFMailComposeViewController  *picker = [[MFMailComposeViewController  alloc] init];
        picker.mailComposeDelegate = self;

        [picker setSubject:@"Reclutamento pompieri"];

        // Set up the recipients.
        NSArray *toRecipients = [NSArray arrayWithObjects:@"youporn@gmail.com",nil];

        //NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com",@"third@example.com", nil];
        //NSArray *bccRecipients = [NSArray arrayWithObjects:@"four@example.com",nil];

        [picker setToRecipients:toRecipients];
        //[picker setCcRecipients:ccRecipients];
        //[picker setBccRecipients:bccRecipients];

        // Attach an image to the email.
        //NSString *path = [[NSBundle mainBundle] pathForResource:@"ipodnano" ofType:@"png"];
        //NSData *myData = [NSData dataWithContentsOfFile:path];
        //[picker addAttachmentData:myData mimeType:@"image/png" fileName:@"ipodnano"];

        // Fill out the email body text.
        //NSMutableString *emailBody;
        testoMail = [NSMutableString stringWithFormat: @"%@", testoMail];

        [picker setMessageBody:testoMail isHTML:YES]; //HTML!!!!!!

        // Present the mail composition interface.
        [self presentViewController:picker animated:YES completion:nil];
    }
}


// The mail compose view controller delegate method
- (void)mailComposeController:(MFMailComposeViewController *)controller
          didFinishWithResult:(MFMailComposeResult)result
                        error:(NSError *)error
{
    [self dismissModalViewControllerAnimated:YES];
}

#pragma mark - Mandare email
/*
 - (void)sendMail:(NSMutableString*)testoMail{

 MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
 picker.mailComposeDelegate = self;

 [picker setSubject:@"Reclutamento pompieri"];

 // Set up the recipients.
 NSArray *toRecipients = [NSArray arrayWithObjects:@"reda.bousbah@gmail.com",nil];
 //NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com",@"third@example.com", nil];
 //NSArray *bccRecipients = [NSArray arrayWithObjects:@"four@example.com",nil];

 [picker setToRecipients:toRecipients];
 //[picker setCcRecipients:ccRecipients];
 //[picker setBccRecipients:bccRecipients];

 // Attach an image to the email.
 //NSString *path = [[NSBundle mainBundle] pathForResource:@"ipodnano" ofType:@"png"];
 //NSData *myData = [NSData dataWithContentsOfFile:path];
 //[picker addAttachmentData:myData mimeType:@"image/png" fileName:@"ipodnano"];

 // Fill out the email body text.
 NSString *emailBody = @"It is raining in sunny California!";
 [picker setMessageBody:emailBody isHTML:NO];

 // Present the mail composition interface.
 [self presentViewController:picker animated:YES completion:nil];


 }
 */

#pragma mark - methods to control the keyboard

- (IBAction)backgroundTap:(id)sender //method for resign the keyboard when the background is tapped
{
    [nameTextField resignFirstResponder];
    [surnameTextField resignFirstResponder];
    [bornDateTextField resignFirstResponder];
    [addressTextField resignFirstResponder];
    [zipTextField resignFirstResponder];
    [emailTextField resignFirstResponder];

}

- (IBAction)doneButtonPressed:(id)sender
{
    NSLog( @"done button pressed");
    [sender resignFirstResponder];
}

@end
于 2013-01-18T13:54:28.107 に答える
0

輸入

#import <MessageUI/MFMailComposeViewController.h>
于 2013-01-18T13:45:37.297 に答える
0

プロジェクトに MessageUI.framework を追加します。ナビゲーターでプロジェクトをクリックし、[ビルド フェーズ] を選択して、[ライブラリとのリンク] セクションの下に追加します。

于 2013-01-18T14:05:12.190 に答える