无法在iOS7中显示模态ViewController

时间:2013-09-24 10:18:05

标签: ios ios7

我试图将系统定义的viewcontrollers(MFMailComposeViewController,TWTweetComposeViewController等)显示为模态视图。

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

我创建的Viewcontrollers出现在iOS7(ex.HogeViewController)中。

我不会在presentViewController:animated:completionviewDidLoad致电viewWillAppear

有人有想法吗?

控制台日志:

  

init Error Domain = NSCocoaErrorDomain Code = 4097“操作无法完成。(Cocoa error 4097。)”

  

_serviceViewControllerReady:error:Error Domain = NSCocoaErrorDomain Code = 4097“操作无法完成。(Cocoa error 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 error 4097.)”   对开始/结束外观转换的不平衡调用。   错误:(空),结果是:0

10 个答案:

答案 0 :(得分:24)

事实证明,只有在自定义UIBarButtons时才会出现此问题。如果我们在iPhone 5s上运行的32位应用程序中使用以下内容,则会出现问题:

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

离开那条线可解决问题。我们已经提交了一份雷达。

答案 1 :(得分:7)

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

答案 2 :(得分: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上进行测试。

答案 3 :(得分:2)

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

This question显示某人有类似的问题,在他们的情况下摆脱UISearchBar外观选择器修复它。因此,这些UIAppearance选择器出现了问题。

答案 4 :(得分:1)

这篇文章帮助我找到了类似问题的解决方案。但是我的问题与标签栏没有关系,所以如果有其他人遇到这个帖子,我想我会分享:

点击表格单元格时打开邮件模式,但会立即解除。就我而言,这段代码导致了这个问题:

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

我删除了它,一切正常!

答案 5 :(得分:0)

在我的情况下,以下代码会在 64位计算机或模拟器上导致相同的问题。希望能帮助某人解决这个问题。

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

答案 6 :(得分:0)

当app不符合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选择器中注释掉setInsets的位置

,那就更好了

答案 7 :(得分:0)

使用SLComposeViewController使用64位或iPhone 5s的模拟器与Facebook或Twitter共享时出现相同的错误,然后我删除使用“外观”的每一行代码,例如[UITableViewCell外观]或[UIBarButtonItem外观],每次运行都好。

答案 8 :(得分:0)

我将xcode更新为5.1版,现在工作正常。

答案 9 :(得分:0)

NSXPCConnectionInterrupted = 4097.我会让你的代码重试命令,因为错误看起来很短暂。