在 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 中,UIViewController
的 presentModalViewController: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 功能的条件支持的主要内容,如果未能解决你的问题,请参考以下文章