NSClassFromString是否会检查iOS版本中的工作

时间:2012-09-26 15:13:46

标签: ios ios6

我还没有时间完全进入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

}

感谢您的任何想法......

2 个答案:

答案 0 :(得分:0)

为什么不直接询问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

}

答案 1 :(得分:0)

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

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

但是,通常最好对OS版本(或设备类型)做出任何假设,而是明确检查要存在的功能。确实使用NSClassFromString(..)来查看某个类是否可用。使用[object respondsToSelector:]查看对象是否支持某种方法。