0

我正在使用的一个应用程序使用 SLComposeViewController 来发送推文。此功能已在应用程序中运行了一段时间。将 SDK 更新到 7.0 后,我遇到了问题。

问题是 SLComposeViewController 在呈现后立即调用其完成处理程序。SLComposeViewControllerResult 是取消。任何显示 SLComposeViewController 的尝试都会发生这种情况。

我能够在示例应用程序中让此代码在 64 位设备/模拟器上运行,但它在我正在处理的较大应用程序中失败。

工作案例:

  • 任何带有 6.1 SDK 的设备
  • 任何带有 7.0 SDK 的 32 位设备
  • 我的示例应用程序

失败案例:

  • 64 位 iPhone 5S 和 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-罗斯。作为记录,来自 iOS Photo 应用程序的 Twitter 共享可以在我的设备上运行。

关于我的工作示例应用程序和失败的应用程序之间可能存在什么差异的任何想法?

4

2 回答 2

1

这绝对是 Apple 框架中的一个错误,并且已知会影响多个视图控制器,包括 MFMailComposeViewController 和 TWTweetComposeViewController 以及 SLComposeViewController,如本答案所述: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]];
于 2013-11-09T14:51:25.443 回答
1

作为短期修复的最佳选择是将目标 > 构建设置 > 架构 > 架构更改为“标准架构”而不是“标准架构(包括 64 位)”。

我怀疑这是一个错误,您最好的选择是将其提交到http://bugreport.apple.com。然后,随着未来的每次操作系统更新,将构建设置更改为包括 64 位,以查看问题是否已解决。

于 2013-11-08T17:40:27.553 回答