2011-02-01 12 views
1

私は、アプリケーションで使用されるすべての定数を配置するために使用するmyConstants.hというファイルを持っています。このファイルは、変数の1つにアクセスする必要のあるクラスにインポートされます。iPhone - メソッドなしで条件変数を定義する

私は普遍的なアプリケーションを構築しています。iPadまたはiPhoneで実行している場合、異なる値を持つ必要がある変数があります。

私はあなたに私が意味するものの一般的な例を挙げます。私のメインのコードで

私のようなものがあり:

self.DEVICE = @"iphone"; 
self.IPAD = NO; 

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    self.DEVICE = @"ipad"; 
    self.IPAD = YES; 
} 

をしかし、これはメインのコードに定義しています。これらの2つの変数のいずれかを使用するためにクラスが必要な場合は、メインクラスを参照してそこで変数を読み取るための複雑なメソッドを作成する必要があります。

私の考えはmyConstants.hにこれを含めることです。

しかし、myConstants.hがすべての行がメソッドなしの#defineエントリであるプレーンファイルの場合はどうすればよいですか?

私の考えでは、DEVICEIPADの変数をアプリケーション全体のグローバルとして使用し、どのクラスでも#import "myConstants.h"で利用できるようにすることを考えています。

これは可能ですか?どうやって?あなたがプリコンパイラを利用することができます

おかげ

答えて

1

#defineブロックはコンパイル時に解釈されるため、この場合は動作します。どのようなデバイスを使用しているのか、コンパイラはどのように知っていますか?

UIDevice extensionを使用して実行時にデバイスタイプを検出するアプリ(if文)で何かします。これは正常に動作します。

+0

それだけです。良いアイデア。それをUIDeviceの拡張機能とする。私はErica Sadunの拡張機能を使用していませんが、それほど多くのものは必要ないので、より小さなものを設計します。ありがとう!!! – SpaceDog

1

#if TARGET_OS_IPHONE 
NSString *device_ = @"iphone"; 
#endif TARGET_OS_IPHONE 

など

[ビルドプロパティであなたのディレクティブを定義します。

+0

残念ながら、これはコンパイル時にのみ便利で、必要なときには実行時には役に立ちません。とにかくありがとう。 – SpaceDog

+0

そうですね、デバイス「MyApp」と「MyApp HD for iPad」ごとに別々のバイナリのラインに沿ってもっと考えていました。 – MarkPowell

関連する問題