1

ユーザーが見ることができるように特定のページをUIWebViewにロードするユニバーサルiOSアプリがあります。これで、iPadとiPhone用に異なるページのセットがあります(デバイスタイプごとに独自のページディレクトリがあります)。

デバイスタイプに基づいて適切なページにリダイレクトするために、Xcodeのコードはクエリ文字列にデバイスタイプを示しています。私はマクロを介してこれを行おうとしています:

#define BaseURL @"http://someurl/Pages/Login.aspx?"
#define QueryStringParam (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) ? @"deviceType=iPad" : @"deviceType=iPhone"
#define LoginPageUrl    BaseURL QueryStringParam

ここでの2番目のマクロは、コンパイルエラー「呼び出されたオブジェクトタイプNSString*は関数または関数ポインタではありません」をスローします。

では、マクロを使用して問題を解決できますか?マクロで三項演算子を使用するための正しい構文は何ですか?

4

1 に答える 1

4

隣接する文字列リテラルとの文字列連結は、両方が文字列リテラルである場合にのみ機能します。

@"foo" @"bar"       is the same as         @"foobar"

@"foo"@"bar"は文字列リテラルなので、しかし

@"foo" (@"bar")     is compiler error

間にあるから(です。これはあなたと同じ状況です。この場合、実行時に 2 つの文字列を連結することをお勧めします。

#define LoginPageUrl    [BaseURL stringByAppendingString:(QueryStringParam)]

または、BaseURL と QueryStringParam を組み合わせて、コンパイラに 2 つの隣接する文字列リテラルを表示させます。

#define LoginPageUrl \
    ((UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) ? \
        BaseURL @"deviceType=iPad" : \
        BaseURL @"deviceType=iPhone")
于 2012-10-23T07:58:43.563 に答える