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

标签 ios xcode ipad uikit ios7

我正在努力编译适用于 iOS 6 和 iOS 7 的 iPad 应用程序。

这是我不断收到的消息:

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 屏幕截图。请注意我的 iPad 3 在事件方案选择中的两个条目。有什么区别?如果我选择顶部选项,我会收到错误消息。如果我选择底部选项,它会起作用。

Xcode device selection

谁能解释为什么同一个设备在此列表中出现两次,以及为什么当我选择一个而不是另一个时它有效?仅供引用,该设备安装了 iOS 6。

最佳答案

您的 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 上不可用。

关于ios - 编译适用于 iOS 6 和 iOS 7 的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19009538/

相关文章:

iphone - 在 iPhone 中使用哪种方法从视频中提取帧?

ios - 这个 curl 请求在 swift 中的等价物是什么

iphone - 将GameKit限制为蓝牙(替代:找出GameKit是使用蓝牙还是WiFi)

iphone - iPad 中的宏问题 (#define) "showing Expected identifier before numeric constant"错误

ios - NSDecimalNumber notANumber 对于字母 'E' 不正确

ios - iPad 中的 Split View

xcode - 为什么在Xcode导航器中单击项目会显示原始的pbxproj文件

ios - SKStoreReviewController 不工作

swift - 只有在 "Has no segue with identifier"上调用 performSegue 时才会出现 `tableView (_: didSelectRowAt:)` 错误

html - 在 iphone 和 ipad 屏幕视口(viewport)上适合网站?