我试图将系统定义的viewcontrollers(MFMailComposeViewController,TWTweetComposeViewController等)显示为模态视图。
但是这些视图控制器不会出现在iOS 7中(这些在iOS5,iOS6中运行)。
我创建的Viewcontrollers出现在iOS7(ex.HogeViewController)中。
我不会在presentViewController:animated:completion
或viewDidLoad
致电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
答案 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.我会让你的代码重试命令,因为错误看起来很短暂。