如何设置当前iOS版本中不存在的枚举?

Amo*_*kar 1 objective-c ios ios5 ios6

我正在尝试在UIButton中为textLabel设置linebreakmode.

self.scheduleButton.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
Run Code Online (Sandbox Code Playgroud)

NSLineBreakByWordWrapping 在iOS 6.0之前不可用.

self.scheduleButton.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
Run Code Online (Sandbox Code Playgroud)

将在iOS6之前工作但XCode会抛出一个错误,说它无法识别UILineBreakModeWordWrap.

如何确保在iOS 6之前完全忽略UILineBreakModeWordWrap代码.

我已经制作了一个宏来检查操作系统版本,我会使用respondsToSelector,如果它是一个方法的情况,但这是一个枚举类型.

SYSTEM_VERSION_LESS_THAN(@"6.0")
Run Code Online (Sandbox Code Playgroud)

我在这里使用它,但在if-else场景中但它仍然不能正常工作,因为XCode仍会告诉我UILineBreakModeWordWrap无法识别.

有没有办法在预处理级别了解操作系统版本?

#define SYSTEM_VERSION_LESS_THAN(v)                ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
Run Code Online (Sandbox Code Playgroud)

我做的这个宏只会添加Objective C代码来确定操作系统类型,这意味着检查将在运行时进行.

但由于这个XCode不会忽略UILineBreakModeWordWrap.

rma*_*ddy 6

这两个NSLineBreakByWordWrappingUILineBreakModeWordWrap值相同.只要您的Base SDK是6.0或更高版本,那么使用NSLineBreakByWordWrapping将使编译器满意并且它将在运行时适用于任何版本的iOS.