如果部署目标是iOS7,如何检测仅限iOS8的代码?

如果部署目标是iOS7,如何检测仅限iOS8的代码?,ios,xcode,ios7,ios8,Ios,Xcode,Ios7,Ios8,对于我的应用程序,我希望支持iOS7和iOS8。我已经将部署目标设置为iOS7,但是Xcode没有向我突出显示仅在iOS8上可用的方法(导致应用程序在iOS7中崩溃,例如使用[NSString containsString]) 在androidstudio中,如果您设置了minSDK,那么如果您使用的是仅在较新版本中添加的方法,则会显示一条警告。我试着四处寻找,但似乎找不到任何有用的东西。我觉得我可能缺少一些基本的东西。这就是你的做法: if ( [object respondsToSelect

对于我的应用程序,我希望支持iOS7和iOS8。我已经将部署目标设置为iOS7,但是Xcode没有向我突出显示仅在iOS8上可用的方法(导致应用程序在iOS7中崩溃,例如使用[NSString containsString])

在androidstudio中,如果您设置了minSDK,那么如果您使用的是仅在较新版本中添加的方法,则会显示一条警告。我试着四处寻找,但似乎找不到任何有用的东西。我觉得我可能缺少一些基本的东西。

这就是你的做法:

if ( [object respondsToSelector:@selector(containsString:)] )
    NSLog ( [object containsString:@"abc"]?@"WOOT!":@"darn..." )
if ([string respondsToSelector:@selector(containsString:)]) {
    //Do your iOS 8 only code.
}

没有旧iOS版本的支持,无法知道您是否正在使用新功能。唯一的方法是在文档中检查它们的可用性:(

要编写在iOS版本之间更改的代码,请添加全局变量或定义:

#define IS_UNDER_IOS_8 ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0)

你可以换一个

[stringA containsString:stringB]


这将检查位置是否等于NSNotFound,以了解某个字符串是否包含另一个字符串。

可能可以尝试使用早期版本的基本SDK编译项目。然后,它将显示在早期iOS版本中不起作用的代码。虽然XCode只包含最新的SDK。因此需要下载所需的SDK并将其复制到适当的目录。类似这样的内容:

AFAIK,没有办法做到这一点,您需要知道每个版本都添加了哪些内容,才能知道使用是否安全。关于您的特定示例,您可以使用
NSString.rangeOfString:(NSString*)
,并检查位置是否等于
NSNotFound
,以了解某个字符串是否包含另一个字符串。这将适用于iOS7和iOS8Wow,考虑到苹果非常强调应用程序的性能和稳定性,我发现他们没有这样的基本功能是令人惊讶的。我认为很多应用程序会在较旧的应用程序上崩溃iOS可能是由这么简单的原因造成的。感谢您对NSString containsString的建议。但是我认为我的应用程序还有其他仅iOS8的代码,但现在我无法找到答案。顺便说一句,我认为您应该发布您的评论作为答案。苹果强调并谈论了很多事情,但他们确实没有投入太多精力使开发人员的工作变得简单。如果你想使用新的东西,就必须编写难看的代码。当一个新的iOS出现时,旧的iOS没有更新任何东西,它们会被忘记。你真的必须检查每一种方法,看它在编码时是否在你的目标上可用。这并不难或者苹果公司制作一个分析工具,但是…谢谢你的建议,但是我想为我的所有代码检测仅限iOS8的方法。我不可能在我的整个代码中添加respondToSelector。谢谢你的建议,但是我想为我的所有代码检测仅限iOS8的方法。我不可能在我的整个代码中添加respondToSelector。好吧理论上你可以旋转类并添加那些方法,但实际上你必须决定不调用那些不存在的方法。
[stringA containsString:stringB]
[stringA rangeOfString:stringB].location != NSNotFound