Ios 无法在SpeakHere项目中加载电子邮件接口

Ios 无法在SpeakHere项目中加载电子邮件接口,ios,iphone,objective-c,email,Ios,Iphone,Objective C,Email,我正在通过电子邮件发送记录的数据。我正在做的项目是基于苹果公司的示例项目SpeakHere。我的程序的功能是,当我点击停止按钮时,手机会显示电子邮件视图。本部分基于苹果的电子邮件示例代码编写,如下所示: -(void)displayComposerSheet{ MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; picker.mailComposeDelegate = self;

我正在通过电子邮件发送记录的数据。我正在做的项目是基于苹果公司的示例项目SpeakHere。我的程序的功能是,当我点击停止按钮时,手机会显示电子邮件视图。本部分基于苹果的电子邮件示例代码编写,如下所示:

-(void)displayComposerSheet{
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self; 

[picker setSubject:@"Recorded Data!"];
// Set up the recipients.
NSArray *toRecipients = [NSArray arrayWithObjects:@"yyyy@gmail.com",nil];

[picker setToRecipients:toRecipients];

NSString *path = recorder -> getFilePath();
NSLog(@"%@",path);

NSData *myData = [NSData dataWithContentsOfFile:path];
[picker addAttachmentData:myData mimeType:@"text/plain" fileName:@"MyFile"];

// Fill out the email body text.
NSString *emailBody = @"The attachement is the recorded integer data!";
[picker setMessageBody:emailBody isHTML:NO];

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

[picker release]; // Can safely release the controller now.
}
mail compose视图控制器委托方法类似于:

- (void)mailComposeController:(MFMailComposeViewController *)controller
      didFinishWithResult:(MFMailComposeResult)result
                    error:(NSError *)error
{
UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"Mail Alert" message:nil delegate:self cancelButtonTitle:@"ok" otherButtonTitles: nil] ;


switch (result)
{
    case MFMailComposeResultCancelled:
        alert.message = @"Email Cancelled";
        break;
    case MFMailComposeResultSaved:
        alert.message = @"Email Saved";
        break;
    case MFMailComposeResultSent:
        alert.message = @"Email Sent";
        break;
    case MFMailComposeResultFailed:
        alert.message = @"Email Failed";
        break;
    default:
        alert.message = @"Email Not Sent";
        break;
}


// [self dismissModalViewControllerAnimated:YES];
[self dismissViewControllerAnimated:YES completion:NULL];
[alert show];
}`
然而,当我点击停止按钮时,它崩溃了。我觉得原因是这段代码是用SpeakHereController.mm编写的。但是,真正的视图控制器是SpeakHereViewController。SpeakHereViewController.h中的代码为

@class SpeakHereController;
@interface SpeakHereViewController : UIViewController {

IBOutlet SpeakHereController *controller;
}
@end
但是,我不知道如何编辑电子邮件部分的代码以将视图控制器从self(SpeakHereController)设置为SpeakHereViewController。有人能帮我吗?非常感谢

后续行动:

如果我按以下方式更改代码,我的iPhone可以显示邮件视图:

self.window.rootViewController = viewController;
在委托文件中,然后更改

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

但是,新的问题是,如果我取消邮件,邮件视图将无法关闭。出现问题的原因似乎是以下代码:

picker.mailComposeDelegate = self;

委托应该是根视图控制器的委托,但我不知道如何将该委托设置为根视图控制器的委托。有人能帮忙吗?

我相信您的邮件控制器需要代表,即

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

@interface SpeakHereViewController : UIViewController <MFMailComposeViewControllerDelegate>
#导入
#进口
@接口SpeakHereViewController:UIViewController
确保添加MessageUI框架


我有时觉得苹果教程有点难以理解。试试谷歌xcode电子邮件教程。是一个。

放入崩溃日志。它会让其他人知道它在哪里绊倒了你好,山姆,谢谢你的回复,我已经添加了崩溃日志。SpeekHereViewController似乎有一个导航栏。您应该执行
[[self-navigationController]presentViewController:picker-animated:YES-completion:nil]取而代之。谢谢Larme。它用于显示视图。但是,当我取消电子邮件时,手机不会关闭视图。我认为这是关于设置“picker.mailComposeDelegate=self;”的问题,委托人也应该是navigationcontroller的委托人,对吗?您知道如何将其设置为navigationcontroller的委托吗?我已经将这些代码添加到SpeakHereViewController。然而,它给了我同样的问题。我想我需要一种方法将当前视图控制器设置为函数[self-presentViewController:picker animated:YES completion:NULL];不是将其设置为self.dumb question,而是在重新编码停止后立即显示电子邮件窗口吗?老实说,我看不出这个代码有什么问题,我想我得到了…项目设置是否显示iOS 5?切换到iOS 6还是iOS 7?这意味着在iOS 6/7模拟器中运行它
#import <MessageUI/MessageUI.h>
#import <MessageUI/MFMailComposeViewController.h>

@interface SpeakHereViewController : UIViewController <MFMailComposeViewControllerDelegate>