NSClassFromString检查在iOS版本中继续工作吗

NSClassFromString检查在iOS版本中继续工作吗,ios,ios6,Ios,Ios6,我还没有时间完全进入iOS mods和构建,但我需要用iOS 5.1和4.4 SDK进行另一次更新。我想现在为iOS上的用户更改一个显示的按钮。不确定这是否有效。我用NSClassFromString检查基本上是向前而不是向后。这个构建是特定的还是仅仅基于构建的SDK版本?我只想查看iOS版本,了解屏幕上显示的内容和位置。纯老式的功能,iOS6没有什么新功能,但我正在使用5.1构建,目标仍然是3.0 if (NSClassFromString(@"UICollectionView")) {

我还没有时间完全进入iOS mods和构建,但我需要用iOS 5.1和4.4 SDK进行另一次更新。我想现在为iOS上的用户更改一个显示的按钮。不确定这是否有效。我用NSClassFromString检查基本上是向前而不是向后。这个构建是特定的还是仅仅基于构建的SDK版本?我只想查看iOS版本,了解屏幕上显示的内容和位置。纯老式的功能,iOS6没有什么新功能,但我正在使用5.1构建,目标仍然是3.0

if (NSClassFromString(@"UICollectionView")) {

        //  Here is old code to show a simple button
        //  that only shows differently for iOS6

} else {  // same old button that will work as before on older devices

}

感谢您的任何想法……

为什么不直接要求ios版本呢

NSString *version = [[UIDevice currentDevice] systemVersion];
if ([version hasPrefix:@"6"]) {
    //  Here is old code to show a simple button
    //  that only shows differently for iOS6
} else {  // same old button that will work as before on older devices

}
编辑:

未来的iOS版本安全代码是的,没有那么漂亮:

NSInteger major = 0;
NSString *version = [[UIDevice currentDevice] systemVersion];
NSRange seperator = [version rangeOfString:@"."];
if (seperator.location != NSNotFound)
    major = [[version subStringToIndex:range.location] integerValue];
else
    major = [version integerValue];

if (major >= 6) {
    //  Here is old code to show a simple button
    //  that only shows differently for iOS6
} else {  // same old button that will work as before on older devices

}

要使代码仅在a.b.c及以后的版本中可用,请将其包装在运行时版本检查中:

if ([@"a.b.c" compare:UIDevice.currentDevice.systemVersion options:NSNumericSearch] != NSOrderedDescending) {
    // only available in a.b.c. and after
}

但是,一般来说,最好不要对操作系统版本或设备类型做出任何假设,而是显式检查要提供的功能。确实要使用NSClassFromString。。查看是否有可用的类。使用[object respondsToSelector:]查看对象是否支持某种方法。

苹果公司不建议这样做。原始问题的运行时检查更安全。你在哪里看到他们的建议-你有链接吗?我不是怀疑你,我只是没看到他们这么说!名为。你的方法很容易出现开发人员错误,也不允许将来的版本更改。这也是我读到的,也是为什么我没有选择这个选项的原因。哦,这绝对不是未来的证明——它只是示例代码:您显示的链接绝对正确,可以确定某个类是否可用,但这不是OP想要的——他不想使用UICollectionView类,他使用它的存在来指示iOS版本;一种同样容易发生开发人员错误的方法@如果我的假设是错误的,请纠正我!假设UICollectionView是您尝试使用或不使用的类,它将正常工作。不,UICollectionView实际上与此无关。对于IF语句来说,这真的很重要吗?我只是想问一下关于iOS6的事。这是我在讨论中发现的最常见的事情。然后你在做一些有趣的事情。我不明白到底是什么…是的,这很奇怪。我只想向现在拥有新地图的iOS6用户显示某个按钮更改。它只是将它们发送到带有点的应用程序中,而不在其中使用MapKit。旧的iOS不需要这个按钮,因为新的地图不在那里。这似乎是苹果最好的方式。你为什么不测试一下这个功能的可用性呢?