2013-09-25 25 views
11

我挣扎编译iPad应用程序上使用的iOS 6和iOS 7编译,在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 Target Settings

下面是代码:

在.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的两个条目。有什么不同?如果我选择最上面的选项,我会看到错误。如果我选择底部选项,它可以工作。

Xcode device selection

谁能解释为什么同样的设备在此列表中出现两次,为什么当我选择一个,而不是其他的工作?仅供参考,该设备安装了iOS 6。

+0

这是一个运行时还是编译错误?你可以试试'@selector(setBarTintColor:)'? –

+0

您是否尝试过选择器setBarTintColor:?如[tabbedBar setBarTintColor:[UIColor blackColor]]; – CSmith

+0

对不起,Xcode也不知道'setBarTintColor'。看到这个截图[链接](http://i.imgur.com/kN0Qu7N.png) – Axeva

回答

15

在Xcode中安装了两个SDK:iOS 6和iOS 7.现在,如果插入iOS 7设备,它会在设备选择器中显示为两个设备(即选项):first排为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上不可用。

+0

我不确定。无论设备是否具有iOS 6或iOS 7,是否都不应该创建一个二进制文件?当您发布到App Store或Enterprise Distribution时,您只能构建一个版本。每个SDK都没有一个。 – Axeva

+0

是的,但我只是谈论在iPad上运行。当您将应用程序归档时,它在iOS 6和7上均可正常运行。您可以尝试制作归档文件并通过TestFlight/HockeyApp进行分发,因此您不会遇到任何问题。 –

+2

因此,Xcode在测试时编译特定的SDK版本,而不是通用的二进制文件? – Axeva