0

こんにちは、私のアプリケーションの 1 つで、そのアプリを IOS6 と IOS7 でサポートする必要があります。そのためには、まず現在のデバイスのバージョンを知る必要があります。そのために、1 つのマクロを定義し、そのマクロをリファレンスとして使用してタスクを達成しようとしています。私が書いたコードは以下の通りです。

.h ファイルで IPhoneOSVersion を 50000 と定義しました。

このコードは .m ファイルにあります

if([[[UIDevice currentDevice] systemVersion] isEqualToString:@"7.0"])
    {

      #undef IPhoneOSVersion
      #define IPhoneOSVersion 70000

        NSLog(@"_IPHONE_OS_VERSION_MIN_REQUIRED after is %d",IPhoneOSVersion);
    }
    else 
    {

          #undef IPhoneOSVersion
          #define IPhoneOSVersion 60000

        NSLog(@"_IPHONE_OS_VERSION_MIN_REQUIRED after is %d",IPhoneOSVersion);
    }

NSLog(@"_IPHONE_OS_VERSION_MIN_REQUIRED after is %d",IPhoneOSVersion);

そして、IOS7でこのコードを実行すると. コンソールでは、70000 後の _IPHONE_OS_VERSION_MIN_REQUIRED のようにデータを出力する必要がありますが、残念ながら 60000 の後に _IPHONE_OS_VERSION_MIN_REQUIRED を取得しています。else 条件にもブレークポイントを設定しましたが、それは実行されていませんが、マクロ値が変化しています。誰か教えてください。マクロ値がこのように変化する理由を知っています。

4

3 に答える 3

1

OS バージョンに対してハードコーディングするべきではありません。複数の OS バージョンをサポートするために Apple が推奨する方法は、特定のクラス、API、プロトコル、または関数をチェックすることです。これにより、一部のものが下位互換性を持つ場合があるため、柔軟性が向上します。

コードhttp://www.raywenderlich.com/42591/supporting-multiple-ios-versions-and-devicesおよび Apple のドキュメントhttps://developer. apple.com/library/ios/documentation/developertools/conceptual/cross_development/Using/using.html

編集: マクロが変更された理由についての質問に答えるために、コンパイラは if-else の両方の分岐を調べるため、マクロの最後の宣言が使用されます。そのようなマクロを使用して実行時に変更することはできません。マクロはコンパイル前に定義することを意図しています。

于 2013-10-01T06:33:06.343 に答える
0

C または C++ とまったく同じ方法で、Objective-C でプリプロセッサを使用します。プリプロセッサは、if/else ステートメントを気にしません。#undef、#define、#undef、#define のシーケンスを見て、それらを次々に実行するため、最後の行では、最後の #define が有効になります。これらの #defines に、実行時に何かが起こっても影響を与えることはできません。

実行中の OS バージョンは常に 3 つあります。デプロイ ターゲット (アプリの実行を許可する最も低い OS バージョン)、SDK バージョン、および実行時の実際のバージョンです。Xcode で設定した最初の 2 つ。実際のバージョンは、展開ターゲットと同じかそれ以上であることがわかっている場合を除いて、明らかに制御できません。

__IPHONE_OS_VERSION_MIN_REQUIRED = デプロイ ターゲット __IPHONE_OS_VERSION_MAX_ALLOWED = SDK バージョン

于 2014-03-06T09:23:52.607 に答える
-1

試してみてください

if([[[UIDevice currentDevice] systemVersion] floatValue] == 7.0)
于 2013-10-01T06:36:47.840 に答える