【问题标题】:MFmailComposer errorMFmailComposer 错误
【发布时间】:2013-02-04 04:52:00
【问题描述】:

我想提前道歉,因为我对编程还很陌生,所以如果我不够具体,我很抱歉,但无论如何我会尽力解释我的问题,我正在创建一个需要能够发送电子邮件的应用程序,我到处寻找,尝试了我能找到的每个示例代码,但每次使用代码时似乎都没有任何效果,我收到以下错误:

2013-02-03 20:23:39.372 Tones[16409:c07] 警告:尝试呈现 上

谁的视图不在窗口层次结构中!

这是我目前在 viewcontroller.h 文件中使用的代码:

UIViewController <MFMailComposeViewControllerDelegate>
- (IBAction)Mail:(id)sender;

这是在我的 viewcontroller.m 文件中:

- (IBAction)Mail:(id)sender {
if ([MFMailComposeViewController canSendMail]) {
    MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];

    mail.mailComposeDelegate = self;

    [mail setSubject:@"Subject"];

    NSArray *recipient = [NSArray arrayWithObjects:@"mail@example.com", nil];
    [mail setToRecipients:recipient]; 

    NSString *body = @"body!";
    [mail setMessageBody:body isHTML:NO];

    [self presentModalViewController:mail animated:YES];
}
}
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
[self dismissModalViewControllerAnimated:YES];
}

我还收到一条消息,说 self presentModalViewController 和 self dismissModalViewController 在 IOS 6 中已弃用,这是否意味着我无法使用它或者我做错了什么?

因此,如果我对邮件作曲家做错了任何帮助,我将不胜感激,如果我不够具体,我再次抱歉,提前谢谢

【问题讨论】:

  • 使用这个 [self presentViewController:mail animated:YES completion:nil];并在 中使用这个 [self dismissViewControllerAnimated:YES completion:nil];

标签: ios objective-c xcode4.5 mfmailcomposeviewcontroller ios6.1


【解决方案1】:

你可以使用 presentModalViewController:animated: 来显示模态视图控制器,但现在建议使用新的:presentViewController:animated:completion:。新的 on 拥有一个完成处理程序,您可以更好地控制代码。注意新方法需要 iOS 5.0 以上版本。如果你的目标是iOS5.0以上,你应该使用新的方法。和dismissModalViewControllerAnimated:一样,使用dismissViewControllerAnimated:completion:代替。

【讨论】:

  • [self presentViewController: 动画: 完成:,[self dismissViewControllerAnimated: 补全:,我在括号内放什么表示出席和解雇,对不起,这对我来说是新的
  • 被称为block,在show/dismiss操作结束时会调用block中的代码。你可以在里面放任何你想做的事情。如果你不想做任何事情,你可以写 ^{} 作为完成。像这样[self presentViewController:mailVC animated:YES completion:^{}];当然可以把自己的代码放在{}之间:[self presentViewController:mailVC animated:YES completion:^{NSLog(@"Hello block");}];
  • 现在一切都很好我现在得到错误但是在模拟器中单击按钮时它仍然出现说“谁的视图不在窗口层次结构中”我不知道如何解决这个问题
  • 这意味着您的视图控制器现在不在视图层次结构中。视图控制器连接似乎有问题,或者您可能从错误的地方调用 -Mail:?您能否粘贴一些有关如何添加视图控制器的代码?您可以检查 Interface Builder 的文件所有者,以查看“视图”属性是否正确连接。也许你可以看看this post
  • 我只是将我创建的动作拖到视图控制器上的按钮上,然后选择里面的修饰就是你的意思
【解决方案2】:

警告“警告:尝试显示不在窗口层次结构中的视图!”表明视图未在 Interface Builder 中或以编程方式连接。

Xcode 检查您在项目设置中使用的 API 会导致弃用警告。如果您将 Xcode 项目的 Build Settings 的 IOS 部署目标设置为 iOS 6,那么任何被 Apple 标记为已弃用的 API(例如 presentModalViewController 和dismissModalViewController)都将被标记。

分别使用 presentViewController:animated:completion: 和 dismissViewControllerAnimated:completion:。

【讨论】:

  • [self presentViewController: 动画: 完成:,[self dismissViewControllerAnimated: 完成:,我在突出显示的区域中添加了什么,对不起,我说这对我来说是新的
  • 对于presentViewController:animated:completion:第一个参数modalViewController就是你要显示上面MFMailComposer的视图。换句话说,在显示 MFMailComposer 之前显示的视图。您可以在动画参数中指定是否希望 MFMailComposer 在显示时进行动画处理(将其视为视觉效果)。同样对于dismissViewControllerAnimated:至于完成参数,如果不使用完成处理程序,则可以传递NULL。
  • 当我点击我的按钮时,我仍然得到“谁的视图不在窗口层次结构中”
  • 您需要在 Interface Builder 中或以编程方式连接视图。
  • 这是怎么做的有什么代码可以给我看或者我需要做什么,很抱歉你可能认为我很笨
【解决方案3】:
[self presentModalViewController:mail animated:YES];

可以替换为

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

[self dismissModalViewControllerAnimated:YES]; 

通过

[self dismissViewControllerAnimated:YES completion:nil];

【讨论】:

    【解决方案4】:

    就像 Sudha 说的,使用[self presentViewController:mail animated:YES/NO completion:nil];iOS6 开始,presentModalViewControllerdismissModalViewController 已被弃用,它们与完成一起使用,对于您的情况,这将是 nil 。

    【讨论】:

      【解决方案5】:

      您好,您可以检查 MFMailComposerViewController 类是否存在。 -(void)email{Class emailClass=(NSClassFromString(@"MFMailComposeViewController"));if emailClass!=nil)if ([emailClass canSendMail]{[self displayComposePage]; }

      【讨论】:

      • 如果有人想将他们的应用程序定位到 iOS3.0 以下,那么这个建议非常棒。否则...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多