在 iOS 5 应用程序中对 iOS 6 功能的条件支持

Posted

技术标签:

【中文标题】在 iOS 5 应用程序中对 iOS 6 功能的条件支持【英文标题】:Conditional support of iOS 6 features in an iOS 5 app 【发布时间】:2012-09-25 19:34:20 【问题描述】:

如何在Minimal Deployment Target 设置为 ios 5.0 的应用中支持 iOS6 的功能?

例如,如果用户使用 iOS 5,他会看到一个 UIActionSheet,如果用户使用 iOS 6,他会看到另一个用于 iOS 6 的 UIActionSheet?你怎么做到这一点? 我有 Xcode 4.5 并且想要在 iOS 5 上运行的应用程序。

【问题讨论】:

【参考方案1】:

您应该始终更喜欢检测可用的方法/功能,而不是 iOS 版本,然后假设方法可用。

见Apple documentation。

例如,在 iOS 5 中,要显示模态视图控制器,我们会这样做:

[self presentModalViewController:viewController animated:YES];

在 iOS 6 中,UIViewControllerpresentModalViewController:animated: 方法已被弃用,你应该在 iOS 6 中使用 presentViewController:animated:completion:,但你怎么知道什么时候使用呢?

您可以检测 iOS 版本并让 if 语句指示您使用前者还是后者,但是,这很脆弱,您会犯错,也许将来更新的操作系统会有新的方法来做到这一点。

正确的处理方法是:

if([self respondsToSelector:@selector(presentViewController:animated:completion:)])
    [self presentViewController:viewController animated:YES completion:^/* done */];
else
    [self presentModalViewController:viewController animated:YES];

您甚至可以争辩说您应该更严格,并执行以下操作:

if([self respondsToSelector:@selector(presentViewController:animated:completion:)])
    [self presentViewController:viewController animated:YES completion:^/* done */];
else if([self respondsToSelector:@selector(presentViewController:animated:)])
    [self presentModalViewController:viewController animated:YES];
else
    NSLog(@"Oooops, what system is this !!! - should never see this !");

我不确定您的 UIActionSheet 示例,据我所知,这在 iOS 5 和 6 上是相同的。也许您正在考虑使用 UIActivityViewController 进行共享,您可能想退回到 @ 987654331@ 如果您使用的是 iOS 5,那么您可能会检查课程是否可用,请参阅here 操作方法。

【讨论】:

您可以在项目设置中链接到框架,在这种情况下,框架可能不会出现在所有版本上,就像您的情况一样,您只需将包含设置为可选而不是必需的。 ---- 问题已删除....问题/评论。 @Daniel:如何知道使用哪些方法respondsToSelector?或者每个方法调用都应该这样做? respondsToSelector: 将检查您在接收器上传递给它的方法的可用性。所以通常你会在你想要调用的方法上调用它。有时您会调用属于同一 iOS 版本/规范的多个方法,因此检查一个您可以假设另一个可用。

以上是关于在 iOS 5 应用程序中对 iOS 6 功能的条件支持的主要内容,如果未能解决你的问题,请参考以下文章

装有 iOS 5 和 iOS 6 的 Facebook

iOS 绘图 (UIImage的一些操作)

在 Xcode 5 中支持 iOS 5 和 iOS 6

如何创建对对象的引用以在 iOS 中对其进行动画处理

在 iOS 6 中启用自动布局,同时保持向后兼容 iOS 5

iOS中对文本输入的监听处理