编译在iOS 6和iOS 7中运行的应用程序

编译在iOS 6和iOS 7中运行的应用程序,ios,xcode,ipad,uikit,ios7,Ios,Xcode,Ipad,Uikit,Ios7,我正在努力编译一个iPad应用程序,以便在iOS 6和iOS 7上使用 以下是我一直得到的信息: Property 'barTintColor' not found on object of type 'UITabBar *'; did you mean 'tintColor'? 目标的基本SDK设置为最新iOS(iOS 7.0),iOS部署目标为iOS 6.0。我对这个项目做了彻底的检查 代码如下: 在.h文件中: @property (nonatomic, strong) IBOutle

我正在努力编译一个iPad应用程序,以便在iOS 6和iOS 7上使用

以下是我一直得到的信息:

Property 'barTintColor' not found on object of type 'UITabBar *'; did you mean 'tintColor'?
目标的
基本SDK
设置为
最新iOS(iOS 7.0)
iOS部署目标为
iOS 6.0
。我对这个项目做了彻底的检查

代码如下:

在.h文件中:

@property (nonatomic, strong) IBOutlet UITabBar *tabbedBar;
在.m文件中:

if ([tabbedBar respondsToSelector: @selector(barTintColor)]) {
     tabbedBar.barTintColor = [UIColor blackColor];
}
我是根据iOS7SDK编译的,所以它应该知道barTintColor。知道问题出在哪里吗

更新:

好吧,我正在进步,但不太明白为什么

请看这个Xcode屏幕截图。请注意活动方案选择中我的iPad 3的两个条目。有什么区别?如果我选择顶部选项,我会得到错误。如果我选择底部选项,它会工作


有人能解释一下为什么同一台设备在这个列表中出现两次,以及为什么我选择一台而不是另一台时它能工作吗?仅供参考,该设备已安装iOS 6。

您的Xcode中安装了两个SDK:用于iOS 6和iOS 7。现在,当这种情况发生时,如果您插入iOS 7设备,它将在设备选择器中显示为两个设备(即选项):第一行是iPad3(iOS 6),第二行是iPad3(iOS 7)

错误的问题是,当您选择iPad3(iOS 6)时,Xcode仍将设备读取为iOS 7(无论如何,这是它安装的),因此在构建时,它会传递
[tabbedBar respondsToSelector:@selector(bartincolor)]
代码(它会响应选择器,因为它是iOS 7),但因为您构建的是iOS 6,同时它会引发一个错误,因为iOS 6没有这个方法!有趣

基本上,在iOS 7设备上进行测试时不能使用iOS 6选项。你要么需要一台iOS 6设备,要么就得用模拟器来测试旧版本

编辑:您可以通过以下方式测试我所说的内容-而不是使用
respondsToSelector:
use

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

然后选择列表中的第一个设备(iPad3iOS6)。您将看到,您经历了
if
子句,但是Xcode给您一个错误,即选择器在iOS 6上不可用。

这是运行时错误还是编译错误?你能试试选择器(setbatintcolor:)
吗?你试过选择器setbatintcolor:?与[tabbedBar SetPartInColor:[UIColor blackColor]]一样;很抱歉,Xcode也不知道有关
setPartIntColor
的信息。看这个截图,你做错了什么。可能清理项目或退出Xcode并再次运行?我已经将最新的iOS 7 SDK
目标设置为6.0
,它对我有效。在
@selector()
中,您必须键入前面提到的
setbatintcolor:
。我看到我的插入式iOS设备在Xcode 5中也列出了两次。我只是把它归结为Xcode,因此我期待这种事情。我不确定。不管设备是iOS 6还是iOS 7,都不应该创建一个二进制文件吗?当您发送到App Store或用于企业分发时,您只生成一个版本。不是每个SDK都有一个。是的,但我说的只是在iPad上运行。当你归档应用程序时,它在iOS 6和iOS 7上都能正常工作。您可以尝试通过TestFlight/HockeyApp制作存档并分发,这样就不会有问题。所以,Xcode在测试时编译特定的SDK版本,而不是通用二进制文件?我不知道是否是这样。在任何情况下,它现在都会检查不可用的API调用(4.x没有这样做),并且由于存在一个指向iOS 7选择器的代码路径(您正在构建以在iOS 6上运行),因此会引发错误。这通常是一件好事,但也可能令人困惑。