编译一个适用于iOS 6和iOS 7的应用程序

我努力编译一个iPad应用程序,用于iOS 6和iOS 7。

这是我不断收到的消息:

Property 'barTintColor' not found on object of type 'UITabBar *'; did you mean 'tintColor'? 

目标的Base SDK设置为Latest iOS (iOS 7.0)iOS Deployment TargetiOS 6.0 。 我在项目上做了一个清理。

Xcode目标设置

这里是代码:

在.h文件中:

 @property (nonatomic, strong) IBOutlet UITabBar *tabbedBar; 

在.m文件中:

 if ([tabbedBar respondsToSelector: @selector(barTintColor)]) { tabbedBar.barTintColor = [UIColor blackColor]; } 

我正在编译iOS 7 SDK,所以它应该知道barTintColor。 任何想法可能是什么问题?

更新:

好的,我正在取得进展,但不完全明白为什么。

看到这个Xcode截图。 在Active Scheme选项中记下我的iPad 3的两个条目。 有什么不同? 如果我select最上面的选项,我得到的错误。 如果我select底部选项,它的工作原理。

Xcode设备选择

任何人都可以解释为什么同样的设备在这个列表中出现两次,为什么当我select一个,而不是另一个? 仅供参考,该设备已安装iOS 6。

您的Xcode中安装了两个SDK:iOS 6和iOS 7.现在,当发生这种情况时,如果插入iOS 7设备,它会在设备select器中显示为两个设备(即选项):第一行是iPad 3(iOS 6),其次是iPad 3(iOS 7)。

你的错误的问题是,当你selectiPad 3(iOS 6),Xcode仍然读取设备为iOS 7(这就是它已经安装,无论如何),所以当它通过[tabbedBar respondsToSelector: @selector(barTintColor)]代码(它响应select器,因为嘿,它是iOS 7),但是因为你正在为iOS 6构build,同时它提出了一个错误,因为嗨,iOS 6没有这个方法! 乐趣。

基本上,在iOS 7设备上testing时,您不能使用iOS 6选项。 你可能需要iOS 6设备,或者你用模拟器来testing旧版本。

编辑:你可以用下面的方式testing我在说什么 – 而不是使用respondsToSelector: use

 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f) { // code } 

然后select列表中的第一个设备(iPad 3 iOS 6)。 你会看到你经历了if子句,但是Xcode给你一个错误,那就是select器在iOS 6上不可用。