我很难编译一个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的两个条目。有什么不同?如果我选择顶部选项,我会收到错误。如果我选择底部选项,它就可以工作。
任何人都可以解释为什么同一设备在此列表中出现两次,以及为什么当我选择一个而不是另一个时它可以工作?仅供参考,该设备已安装iOS 6。
答案 0 :(得分:15)
您的Xcode中安装了两个SDK:适用于iOS 6和iOS 7.现在,当发生这种情况时,如果您插入iOS 7设备,它会在设备选择器中显示为两个设备(即选项):第一行适用于iPad 3(iOS 6),适用于iPad 3(iOS 7)。
您的错误问题在于,当您选择iPad 3(iOS 6)时,Xcode仍然将设备读取为设备为iOS 7(无论如何都是它已安装的设备),因此在构建时通过[tabbedBar respondsToSelector: @selector(barTintColor)]
代码(它响应选择器,'因为嘿,它是iOS 7),但因为你正在为iOS 6构建,同时它会引发错误,'因为嘿,iOS 6没有'有这种方法!乐趣。
基本上,在iOS 7设备上进行测试时,您无法使用iOS 6选项。您需要iOS 6设备,或者您仍然需要使用模拟器来测试旧版本。
编辑:您可以通过以下方式测试我所说的内容 - 而不是使用respondsToSelector:
使用
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f) {
// code
}
然后选择列表中的第一个设备(iPad 3 iOS 6)。你会看到你通过if
子句,但是Xcode会给你一个错误,指出选择器在iOS 6上不可用。