我的应用程序必须适用于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
直到它停止编译为止?
答案 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
属性。