2

Xcode4.5でビルドされたiOS5アプリケーションがあり、iphone5.0シミュレーターで実行しています。XcodeターゲットはiOS5に正しく設定されていますが、ベースSDKはiOS 6であり、Xcode内で変更する方法はありません。列挙型を利用したコードの断片があります。

UIInterfaceOrientationMaskAll

私はコードでその列挙型を実際に使用していません。それは私が行った間違いであり、いくつかの質問をすることになります。

  1. iOS 6から利用可能であり、列挙型が見つからないことを通知するため、コンパイラーのビルドが停止することを期待します。

  2. 次に、シミュレーター(iphone 5.0シミュレーター)でアプリを実行することにより、その列挙型を処理するときに実行時にアプリがクラッシュすることも予想されます。

それは何も起こっていません、そしてアプリはコンパイルされてうまく動作します、あなたは私が欠けているものを説明できますか?

4

2 に答える 2

3

これが私の説明です。

ドキュメントを見ると、すべてのUIInterfaceOrientation値はiOS6.0から入手できます。から返すことになっていますUIApplicationsupportedInterfaceOrientationsForWindow:これはiOS6.0からも利用できます。

ベースSDKは6.0であるため、値UIApplication.hを定義する新しいバージョンのヘッダーファイル()がありenumます。これが、アプリがコンパイルされる理由です。

iPhone 5.0シミュレーターでアプリを実行すると、5.0には存在しなかったため、前述のメソッドを呼び出す人は誰もいません。サブクラスUIApplication化してそのメソッドを実装した場合でも、呼び出されないため、不明なセレクターでアプリがクラッシュすることはありません。アプリのデリゲートによって実装することもできます。

また、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現在は新しいの一部ですios 6 SDK。これは単なる整数値であるため、コードをコンパイルまたはクラッシュしてはならない理由はありません。

于 2012-09-21T21:34:20.990 に答える