我正在使用的应用使用SLComposeViewController发送推文。此功能已在应用程序中工作了一段时间。将SDK更新到7.0后,我遇到了问题。
问题是SLComposeViewController在呈现后立即调用其完成处理程序。 SLComposeViewControllerResult为Cancel。任何尝试显示SLComposeViewController都会发生这种情况。
我能够在示例应用程序中将此代码用于64位设备/模拟器,但它失败了我正在处理的更大的应用程序。
工作案例:
失败的案例:
以下是失败代码的简单实现(几乎可以在任何示例中看到)。
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{
SLComposeViewController *vc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[vc setInitialText:@"Hi Twitter"];
vc.completionHandler = ^(SLComposeViewControllerResult result)
{
};
[self presentViewController:vc animated:YES completion:nil];
return;
}
以下文章表明其他应用在通过Twitter http://tellmenews.com/ipad-air-suffers-from-same-ios-7-twitter-sharing-problem-as-iphone-5s/179686/samantha-ross分享时遇到问题。为了记录,iOS照片应用程序的Twitter共享可以在我的设备上运行。
我的工作示例应用与失败的应用之间存在差异的任何想法?
答案 0 :(得分:1)
作为短期解决方案,您最好的选择是更改目标>构建设置>架构> “标准体系结构”的体系结构,而不是“标准体系结构(包括64位)”。
我怀疑这是一个错误,您最好的选择是将其提交给http://bugreport.apple.com。然后,在每次更新操作系统更新时,将构建设置更改为包含64位,以查看问题是否已解决。
答案 1 :(得分:1)
这绝对是Apple框架中的一个错误,并且除了SLComposeViewController之外,已知会影响多个视图控制器,包括MFMailComposeViewController和TWTweetComposeViewController,如本答案中所述:Cannot show modal ViewController in iOS7。它似乎会影响在64位设备上运行的32位二进制文件,并且可以通过许多不同的UIAppearance自定义调用来触发,但不是所有这些都是。
可以通过识别应用程序中触发此行为的特定UIAppearance自定义调用并在64位设备上删除这些调用,直到您向应用程序添加64位二进制支持。不幸的是,如果不使用UIAppearance自定义调用触发错误,如何在64位设备上解决应用程序外观的问题就会让您陷入困境。
导致此问题的一些UIAppearance调用是:
[[UILabel appearanceWhenContainedIn:[UIButton class] setShadowOffset:CGSizeMake(0.0, 1.0)];
[[UIBarButtonItem appearance] setTitlePositionAdjustment:UIOffsetMake(0, 1) forBarMetrics:UIBarMetricsDefault];
[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setFont:[UIFont systemFontOfSize:17.0]];