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

Axe*_*eva 11 xcode uikit ipad ios ios7

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

这是我一直得到的信息:

Property 'barTintColor' not found on object of type 'UITabBar *'; did you mean 'tintColor'?
Run Code Online (Sandbox Code Playgroud)

Base SDK目标设定为Latest iOS (iOS 7.0),且iOS Deployment TargetiOS 6.0.我在项目上做了一个Clean.

Xcode目标设置

这是代码:

在.h文件中:

@property (nonatomic, strong) IBOutlet UITabBar *tabbedBar;
Run Code Online (Sandbox Code Playgroud)

在.m文件中:

if ([tabbedBar respondsToSelector: @selector(barTintColor)]) {
     tabbedBar.barTintColor = [UIColor blackColor];
}
Run Code Online (Sandbox Code Playgroud)

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

更新:

好的,我正在取得进展,但不太明白为什么.

看到这个Xcode截图.请注意Active Scheme选择中我的iPad 3的两个条目.有什么不同?如果我选择顶部选项,我会收到错误.如果我选择底部选项,它可以工作.

Xcode设备选择

任何人都可以解释为什么同一设备在此列表中出现两次,以及为什么它在我选择一个而不是另一个时有效?仅供参考,该设备已安装iOS 6.

Mar*_*ski 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
}
Run Code Online (Sandbox Code Playgroud)

然后选择列表中的第一个设备(iPad 3 iOS 6).您将看到您通过该if子句,但Xcode会给您一个错误,表明选择器在iOS 6上不可用.

  • 所以Xcode在测试时编译特定的SDK版本,而不是通用二进制文件? (2认同)