2

iPhone 4 でマルチタスクをサポートし、iPad でも実行できるユニバーサル バイナリを作成しようとしています。

NSClassFromString と "respondToSelector" を使用してクラスが存在するかどうかを確認することで、iPhone IOS のさまざまなバージョンのコンパイル エラーを回避する方法を知っていますが、UIBackgroundTaskInvalid のような定数の存在を確認する方法はありますか?

もちろん #IFDEF を使用できますが、これは避けたいと思います。

4

3 に答える 3

2

次のようにします。

if (NULL != &UIBackgroundTaskInvalid) {
   //do multitasking stuff here
} else {
   // don't do multitasking stuff here.
}

基本的に、その変数のアドレスが存在することを確認する必要があります。

更新: 明確にするために、シンボルを含む SDK のバージョンでビルドするため、これに #ifdef を実際に使用することはできません。

于 2010-07-29T12:46:23.507 に答える
1

おそらく、定数に関連付けられていることがわかっているメソッドの存在をテストするだけで十分です。

于 2010-07-29T13:02:47.090 に答える
1

iOS のマルチタスキングを確認するための推奨される方法は、UIDevice が isMultitaskingSupported に応答するかどうかを確認することです。次のようにします。

//----------------------------------------------------------------------
// returns YES if multitasking is available (iOS 4.0 or >)
//----------------------------------------------------------------------
BOOL hasMultitasking() 
{
    UIDevice* device = [UIDevice currentDevice];
    if ([device respondsToSelector:@selector(isMultitaskingSupported)]) {
        return [device isMultitaskingSupported];
    }
    return NO;
}

マルチタスクがサポートされている場合は、それらのマルチタスク関連の定数を使用できます。これには、弱いリンクが必要です。

于 2010-07-29T14:53:08.877 に答える