如何继续支持iOS 5.1,因为函数已被弃用

时间:2014-11-14 13:24:54

标签: ios objective-c

我的应用程序必须适用于iOS版本> = 5.1。

Apple文档说" AudioSession API已在iOS 7.0和#34;中完全弃用。而且应该使用AVAudioSession类。

但我需要的方法(- (BOOL)setCategory:(NSString *)category withOptions:(AVAudioSessionCategoryOptions)options error:(NSError **)outError)仅从iOS 6.0开始提供。

因此,似乎我必须继续使用已弃用的AudioSessionSetProperty来支持iOS 5.1。

处理这种情况的正确方法是什么(我的问题是一般的,不仅仅是关于音频的这个特殊问题)?我应该写点像

if ([[[UIDevice currentDevice] systemVersion] compare:@"6.0" options:NSNumericSearch] == NSOrderedAscending)
{
    // use deprecated methods (AudioSessionSetProperty)
}
else
{
    // use brand-new methods (AVAudioSession)
}

或者可以使用AudioSessionSetProperty直到它停止编译为止?

1 个答案:

答案 0 :(得分:1)

弃用的方法并不会阻止您使用它,但是如果它从您当前选择的iOS版本中弃用,那么它会向您发出警告。例如,如果您的应用仍支持iOS< 6.0,您需要更改UILabel的对齐方式,然后就可以这样做了,

if ([[[UIDevice currentDevice] systemVersion] compare:@"6.0" options:NSNumericSearch] == NSOrderedDescending)
{
    lbl.textAlignment = UITextAlignmentCenter; 
    //for iOS < 6.0, warning when deployment target is iOS 5.0
}
else
{
    lbl.textAlignment = NSTextAlignmentCenter; //for iOS >= 6.0
}

OR

lbl.textAlignment = UITextAlignmentCenter; //with warning in iOS 6.0 

OR

lbl.textAlignment = NSTextAlignmentCenter; //will crash in iOS 5.0 

PS。更好地支持iOS 7.0及更高版本(甚至不是iOS 6.0,因为Apple不会允许使用iOS6.0的应用程序在2月份被@ahwulf评论。),因为最新的iOS 8发布时具有很多优秀的功能和大部分功能人们用这更新了手机。这将在两种情况下帮助您,您不需要检查iOS版本兼容性,并且您的代码看起来很好而没有警告:)但仍然完全取决于您的需求。

更新

OR

@rmaddy建议应使用respondsToSelector:

检查方法是否存在
UILabel *label;

if([label respondsToSelector:@selector(textAlignment)]) {
    label.textAlignment = NSTextAlignmentCenter;
}

在上面的示例中,我们正在检查(但实际上我们已经知道这一点)UILabel是否具有textAlignment属性。