13

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

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

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

我不打电话presentViewController:animated:completionviewDidLoadviewWillAppear

有人有想法吗?

控制台日志:

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

4

10 回答 10

24

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

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

省略那条线可以解决问题。我们已经提交了雷达。

于 2013-10-01T14:50:54.850 回答
7

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

于 2013-10-22T13:53:40.857 回答
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 上测试。

于 2013-11-13T19:47:51.500 回答
2

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

这个问题表明有人有类似的问题,并且在他们的情况下摆脱了 UISearchBar 外观选择器修复了它。所以这些 UIAppearance 选择器有些问题。

于 2013-09-30T23:36:07.830 回答
1

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

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

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

我删除了它,一切正常!

于 2013-10-30T16:13:32.417 回答
0

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

于 2015-02-13T01:37:03.057 回答
0

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

if ([UITableViewCell instancesRespondToSelector:@selector(setSeparatorInset:)]) {
    [[UITableViewCell appearance] setSeparatorInset:UIEdgeInsetsZero];
}
于 2013-12-27T03:01:41.563 回答
0

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

于 2014-03-17T07:16:03.750 回答
0

当应用程序不符合 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 的位置,那就更好了

于 2014-01-15T09:54:47.490 回答
0

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

于 2014-01-16T15:27:37.793 回答