2011-03-18 211 views

回答

30

你必须依靠iOS 是mailComposeController:didFinishWithResult:error:是正确的。模拟器伪造结果;尽管它说MFMailComposeResultSent没有发送实际的邮件。

提到的教程错过一个重要的点:您使用MFMailComposeViewController之前应该做的第一件事就是检查[MFMailComposeViewController canSendMail]。如果用户尚未在其设备上配置邮件,则会返回NO。如果你必须支持一个版本的iOS 3.0之前的正确的方法是检查类MFMailComposeViewController存在:

Class mailClass = (NSClassFromString(@"MFMailComposeViewController")); 
if (mailClass != nil) 
{ 
    if ([mailClass canSendMail]) 
    { 
     [self displayComposerSheet]; 
    } 
    else 
    { 
     [self launchMailAppOnDevice]; 
    } 
} 
else 
{ 
    [self launchMailAppOnDevice]; 
} 

的canSendMail,问题只能是一个真正的设备上进行测试,虽然。如果您不检查canSendMail并且用户没有配置邮件帐户,它将会崩溃。

+0

对于我的任务,我只需要显示作曲家。但我无法这样做。 MFMailComposeViewController * composeVC = [[MFMailComposeViewController alloc] init]; 。这条线弹出警报控制器。 – 2017-12-15 07:53:17

1

您可以使用模拟器上的MessageUI框架撰写和“发送”邮件,但我不认为有实际发送邮件的方法。但是,一旦用户在消息撰写视图中点击了“发送”按钮,您的代码在发送消息时就没有任何作用。所以模拟器做的足够,你可以开发和测试你的应用程序。至于是否有必要有一个真实的设备,我想说,无论如何,在某个时候你需要测试一个或多个设备。模拟器是一个很好的工具,但是在某个特定点之后,它并不能替代真正的应用程序。

4

是的,如果你想真正发送电子邮件是必要的。

在大多数情况下,您不必担心邮件将由苹果应用程序发送,因此您只需验证您的应用程序是否正在响应并启动邮件编辑器即可。我认为唯一有问题的是如果你想确保附件和图像正确发送。在这种情况下,你可以发送一个测试版给iphone的人,并要求他为你检查。

重要 有一个设备是批评开发,您的模拟器并不像设备一样运行。他是一个原谅者,根据我的经验,我总是遇到与模拟器不同的设备问题。

+0

对于我的任务,我只需要显示作曲家。但我无法这样做。 MFMailComposeViewController * composeVC = [[MFMailComposeViewController alloc] init]; 。这条线弹出警报控制器 – 2017-12-15 07:53:31

3

根据discussion on apple forum,为了测试我们真正需要设备的功能,模拟器不支持此功能。

从讨论的一部分:

sptrakesh 芝加哥重新:IOS SIMULATOR

MAIL APP 2012年3月26日上午07点09分(响应于davemac75)

的邮件应用程序是在模拟器上不可用。您将需要 在设备上测试您的应用程序以测试该部分。