编译一个适用于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 Target
为iOS 6.0
。 我在项目上做了一个清理。
这里是代码:
在.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底部选项,它的工作原理。
任何人都可以解释为什么同样的设备在这个列表中出现两次,为什么当我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上不可用。