2

我有一个 iOS 5 应用程序,现在使用 Xcode 4.5 构建,我在 iphone 5.0 模拟器上运行它。Xcode 目标正确设置为 iOS 5,而基本 sdk 是 iOS 6,在 Xcode 中无法更改。有一段代码使用了枚举。

UIInterfaceOrientationMaskAll

我并没有真正在我的代码中使用那个枚举,这是我犯的一个错误,这导致我问了一些问题:

  1. 我希望编译器停止构建,因为它从 iOS 6 开始可用,并告诉我找不到枚举。

  2. 然后,通过在模拟器(iphone 5.0 模拟器)中运行应用程序,我还希望应用程序在处理该枚举时在运行时崩溃。

什么都没有发生,应用程序编译和运行都很好,你能解释一下我错过了什么吗?

4

2 回答 2

3

这是我的解释。

查看文档,所有UIInterfaceOrientation值都可从 iOS 6.0 获得。您应该从UIApplication's中返回它们supportedInterfaceOrientationsForWindow:,这在 iOS 6.0 中也可用。

UIApplication.h由于您的基础 SDK 是 6.0,因此您拥有定义值的新版本的头文件 ( ) enum。这就是您的应用程序编译的原因。

当您在 iPhone 5.0 模拟器上运行应用程序时,没有人调用上述方法,因为它在 5.0 中不存在。即使您已经 subclassedUIApplication并且已经实现了该方法,它也不会被调用,因此您的应用程序不会因未知选择器而崩溃。它也可以由您的应用委托来实现。

此外,enum无论如何,该值只是编译后的一个数字,因此没有会​​导致问题的“处理”,这与缺少接口不同。

但如果我完全偏离了基地,我相信有人会纠正我。

于 2012-09-21T20:28:52.123 回答
0

UIInterfaceOrientationMaskAllUIInterfaceOrientationMask枚举定义的一部分

 typedef enum {
       UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait),
       UIInterfaceOrientationMaskLandscapeLeft = (1 << UIInterfaceOrientationLandscapeLeft),
       UIInterfaceOrientationMaskLandscapeRight = (1 << UIInterfaceOrientationLandscapeRight),
       UIInterfaceOrientationMaskPortraitUpsideDown = (1 << UIInterfaceOrientationPortraitUpsideDown),
       UIInterfaceOrientationMaskLandscape =
       (UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight),
       UIInterfaceOrientationMaskAll =
       (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft |
       UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortraitUpsideDown),
       UIInterfaceOrientationMaskAllButUpsideDown =
       (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft |
       UIInterfaceOrientationMaskLandscapeRight),
    } UIInterfaceOrientationMask;

UIApplication.h在 new 的 the 和 now 部分中定义ios 6 SDK。由于它只是一个整数值,因此您的代码没有理由不应该编译或崩溃。

于 2012-09-21T21:34:20.990 回答