0

私のiPhoneアプリで。を使用してiPhoneメールチャットシートを作成してMFMailComposeViewControllerいます。2回目にメールシートに入ると、アプリがクラッシュします。Googleで検索しました。しかし、私は解決策を見つけることができませんでした。誰でも私の問題を解決するのを手伝ってください。以下のコードを見て、どこが間違っているのか教えてください。

if ([MFMailComposeViewController canSendMail])
        {
            controller = [[MFMailComposeViewController alloc] init];
            controller.mailComposeDelegate = self;
            [controller setSubject:@""];
            [controller setToRecipients:array1];
            [controller setMessageBody:@"" isHTML:NO];
            [controller setMailComposeDelegate: self];
            [controller setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
            [self.navigationController presentModalViewController:controller animated:NO];
            [controller release];
        }

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{
    if(result == MFMailComposeResultSent)
    {
        [[self parentViewController] dismissModalViewControllerAnimated:YES];
    }
    else if (result == MFMailComposeResultCancelled)
    {
        [[self parentViewController] dismissModalViewControllerAnimated:YES];
    }
 }
4

6 に答える 6

0

このコードが問題を引き起こしていると思います:

[[self parentViewController] dismissModalViewControllerAnimated:YES];

上記の使用の代わりに:

[self dismissModalViewControllerAnimated:YES];
于 2012-12-11T04:58:46.257 に答える
0

このコードを置き換えます。

[self.navigationController presentModalViewController:controller animated:NO];

と:

[self presentViewController:controller animated:YES completion:nil];
于 2012-12-11T05:11:02.973 に答える
0
-(void)mail
{ 
  if ([MFMailComposeViewController canSendMail])
    {

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

    [mailController setSubject:@"your Subject"];
    [mailController setMessageBody:@"your message" isHTML:NO];

    UIImage *tmp = [UIImage imageNamed:@"Icon.png"];
    NSData *myData = UIImageJPEGRepresentation(tmp, 1.0);

    [mailController addAttachmentData:myData mimeType:@"image/png" fileName:@"MyPhoto.png"];
    if (arrTo)
        [mailController setToRecipients:arrTo];

    [self presentModalViewController:mailController animated:YES];
    return YES;
}
else {
    return NO;
}
}
}
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{   

    [controller dismissModalViewControllerAnimated:YES];
}
于 2012-12-12T04:56:09.910 に答える
0

同じメソッドを作成する代わりに、このデリゲート メソッドを作成してみてください

それが機能しているかどうかを教えてください!!!!

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
switch (result)
{
    case MFMailComposeResultCancelled:
        NSLog(@"canceled");
        break;
    case MFMailComposeResultSaved:
        NSLog(@"saved");
        break;
    case MFMailComposeResultSent:
        NSLog(@"sent");
        [self showErrorMessage: @"Email sent successfully"];
        break;
    case MFMailComposeResultFailed:
        NSLog(@"failed");
        [self showErrorMessage: @"Failed to send email"];
        break;
    default:
        NSLog(@"not sent");
        break;
}
[self dismissViewControllerAnimated:YES completion:nil];

}

ハッピーコーディング!!!!!!!!

于 2012-12-11T05:07:35.517 に答える
0

メソッドを次のように変更します。

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
    switch (result)
    {
        case MFMailComposeResultCancelled:
            NSLog(@"canceled");
            break;
        case MFMailComposeResultSaved:
            NSLog(@"saved");
            break;
        case MFMailComposeResultSent:
            NSLog(@"sent");
            [self showErrorMessage: @"Email sent successfully"];
            break;
        case MFMailComposeResultFailed:
            NSLog(@"failed");
            [self showErrorMessage: @"Failed to send email"];
            break;
        default:
            NSLog(@"not sent");
            break;
    }
    [self dismissViewControllerAnimated:YES completion:nil];

}

-(void)showErrorMessage:(NSString *)iMessage
{
        NSLog(@"%@", iMessage);
}

前述したように、呼び出し中と定義部分ではメソッドのシグネチャが異なっていました。上記のように、両方の場所で同じである必要があります。

メソッドを呼び出している間[self showErrorMessage: @"Failed to send email"];、定義では文字列部分を受け入れていませんでした。同じ入力パラメータが必要です。as を呼び出して同じことを行い[self showErrorMessage];showErrorMessageメソッドをそのままにしておくこともできます。

于 2012-12-11T06:19:31.560 に答える
0

メールビューを開くメソッドで、コードを以下のコードに置き換えてください。それが機能しているかどうか教えてください!!!!!! ハッピーコーディング!!!!

 MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];

if ([MFMailComposeViewController canSendMail] == NO) {
        return;
}
else
{
    picker.mailComposeDelegate = self;
    NSString *stringtitle=[NSString stringWithFormat:@"Apple"];
    [picker setSubject:stringtitle];

    NSData *imgDataLoop = UIImagePNGRepresentation(shaereImage.image);

    [picker addAttachmentData:imgDataLoop mimeType:@"image/png" fileName:@"rainy"];

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

}
于 2012-12-11T05:27:21.783 に答える