【问题标题】:Cannot show modal ViewController in iOS7无法在 iOS7 中显示模态 ViewController
【发布时间】:2013-09-29 12:10:14
【问题描述】:

我尝试将系统定义的视图控制器(MFMailComposeViewController、TWTweetComposeViewController 等)显示为模式视图。

但这些视图控制器不会出现在 iOS 7 中(它们在 iOS5、iOS6 中运行)。

我创建的视图控制器出现在 iOS7(ex.HogeViewController)中。

我不会在viewDidLoadviewWillAppear 打电话给presentViewController:animated:completion

有人有想法吗?

控制台日志:

init Error Domain=NSCocoaErrorDomain Code=4097 "操作无法完成。(Cocoa 错误 4097.)"

_serviceViewControllerReady:error: Error Domain=NSCocoaErrorDomain Code=4097 “操作无法完成。(Cocoa 错误 4097。)”

开始/结束外观转换的不平衡调用。

TWTweetComposeViewController(不出现)

TWTweetComposeViewController *viewController = [[TWTweetComposeViewController alloc]init];
viewController.completionHandler = ^(TWTweetComposeViewControllerResult result){
    NSLog(@"Result : %d",result);
};
[self presentViewController:viewController animated:YES completion:NULL];

日志

结果:0

MFMailComposeViewController(出现片刻并很快消失)

- (void)send:(NSString*)email{
    if ([MFMailComposeViewController canSendMail]) {
        MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
        picker.mailComposeDelegate = self;

        NSArray *toRecipients = @[email];
        [picker setToRecipients:toRecipients];

        [picker setSubject:@"Subject"];
        [picker setMessageBody:@"Body" isHTML:NO];
        [self.navigationController presentViewController:picker animated:YES completion:NULL];
    }
}

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
    [self dismissViewControllerAnimated:YES completion:^{
        NSLog(@"error:%@,result:%d",error.description,result);
    }];
}

日志

_serviceViewControllerReady:error: Error Domain=NSCocoaErrorDomain Code=4097 “操作无法完成。(Cocoa 错误 4097。)” 开始/结束外观转换的不平衡调用。 错误:(空),结果:0

【问题讨论】:

  • 有兴趣,请出示您的代码吗?
  • 感谢您的评论。我编辑了问题。
  • 你可以尝试设置动画:没有过渡?
  • TWTweetComposeViewController 没有区别。关于MFMailComposeViewController,不出现ViewController和crash(EXC_BAD_ACCESS)。
  • 我遇到了完全相同的问题,但只是在 iPhone 上。 iPad 对我来说不会出现同样的问题。除非我听到其他消息,否则我相信这是一个 iOS 7 错误。如果在结束委托方法上设置断点,邮件控制器的结果是 MFMailComposeResultCancelled。

标签: ios ios7


【解决方案1】:

原来这个问题只在自定义 UIBarButtons 时出现。如果我们在 iPhone 5s 上运行的 32 位应用程序中使用以下内容,就会遇到问题:

[[UIBarButtonItem appearance] setTitlePositionAdjustment:UIOffsetMake(0, 1.0)
                                           forBarMetrics:UIBarMetricsDefault];

省略该行可以解决问题。我们已经提交了雷达。

【讨论】:

  • 感谢您的回复。我删除了 [[UITabBarItem appearance] setTitlePositionAdjustment:UIOffsetMake(0, -1)]; 并修复了这个问题!
  • 我已经报告了这个问题以及 rdar://15165678
  • 这太疯狂了,我为你在 Apple 代码中发现错误而鼓掌。
  • QLPreviewController 也有同样的问题。在低于 7 的版本中自定义 UIBarButtonItem 的 titlePosition 解决了我的问题。
  • 我在使用 UISearchBar 外观 API 时也有同样的体验。 [searchBarApperance setPositionAdjustment:UIOffsetMake(100, 0) forSearchBarIcon:UISearchBarIconClear];
【解决方案2】:

当您在项目设置中未针对 64 位 (arm64) 进行编译时,会出现此问题。虽然这对某些人来说可能并不总是一种选择,因为目前 Google Analytics 不支持 64 位设备。

【讨论】:

  • 我在吃我之前的话;有一个不正确的构建设置,一旦它被修复,并且能够构建 64,这个问题就消失了。支持... ;-)
【解决方案3】:

您可以通过一些子类化来避免这个问题。我遇到了同样的问题,就我而言,罪魁祸首是:

[[UISearchBar appearance] setSearchTextPositionAdjustment:UIOffsetMake(15.0f, 0.0f)];

反正我已经在使用 UISearchBar 的子类了,所以我把它改成了:

[[KA_SearchBar appearance] setSearchTextPositionAdjustment:UIOffsetMake(15.0f, 0.0f)];

这为我解决了问题。仅在 iPhone 5s、iOS 7.0.3 上测试。

【讨论】:

  • 雷达显示为 rdar://15461545
【解决方案4】:

我在相同的情况下得到相同的行为。在我的情况下,它原来是由使用 UITableView 的“setSeparatorInset”外观选择器引起的。摆脱它解决了这个问题。这看起来肯定是 Apple 的一个错误,但至少有一个解决方法。

This question 显示有人遇到类似问题,在他们的情况下摆脱 UISearchBar 外观选择器修复了它。所以这些 UIAppearance 选择器有些问题。

【讨论】:

    【解决方案5】:

    这篇文章帮助我找到了类似问题的解决方案。但我的问题与标签栏无关,所以我想如果其他人看到这篇文章,我会分享:

    点击表格单元格时会打开邮件模式,但会立即关闭。就我而言,此代码导致了问题:

    [[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setFont:[UIFont systemFontOfSize:17.0]];
    

    我删除了它,一切正常!

    【讨论】:

      【解决方案6】:

      在我的情况下,以下代码将在 64 位 机器或模拟器上导致相同的问题。希望能帮助遇到这个问题的人。

      if ([UITableViewCell instancesRespondToSelector:@selector(setSeparatorInset:)]) {
          [[UITableViewCell appearance] setSeparatorInset:UIEdgeInsetsZero];
      }
      

      【讨论】:

        【解决方案7】:

        当应用不符合 64 位架构时,iPad air(64 位)会出现此问题。我遇到的问题是每个尝试使用 UIOffsetMake/UIOffsetZero 的 UIAppearance 选择器都无法正常工作! 例子

            [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(1.0, 1.0) forBarMetrics:UIBarMetricsDefault];
        

            [[UITableViewCell appearance] setSeparatorInset:UIEdgeInsetsMake(0, 5, 0, 5)];
        

        我认为这是 Apple 代码中的一个错误,我尝试了一些东西但没有任何效果。如果你可以注释掉你在 UIAppearance 选择器中设置Insets 的地方会更好

        【讨论】:

          【解决方案8】:

          使用 64 位模拟器或 iPhone 5s 使用 SLComposeViewController 与 Facebook 或 Twitter 共享时,我遇到了同样的错误,然后我删除了每一行使用“外观”的代码,例如 [UITableViewCell 外观] 或 [UIBarButtonItem外观],并且每次运行都正常。

          【讨论】:

            【解决方案9】:

            我将 xcode 更新到 5.1 版,现在可以正常使用了。

            【讨论】:

            • 你能提供更多细节吗?
            【解决方案10】:

            NSXPCConnectionInterrupted = 4097。我会让您的代码重试该命令,因为错误看起来是暂时的。

            【讨论】:

              猜你喜欢
              • 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
              相关资源
              最近更新 更多