2012-10-23 74 views
1

我有一個通用的iOS應用程序,可以將某些頁面加載到UIWebView中供用戶查看。現在iPad和iPhone有一組不同的頁面(每種設備都有自己的頁面目錄)。如何在Objective-C的宏中使用三元運算符?

要根據設備類型重定向到正確的頁面,我在Xcode中的代碼提到查詢字符串中的設備類型。我試圖通過宏來做到這一點:

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

第二個宏在這裏拋出一個編譯錯誤「調用對象類型的NSString *不是一個函數或函數指針」

這樣我就可以解決我的問題都在使用宏?在宏中使用三元運算符的正確語法是什麼?

回答

4

與相鄰的字符串文字的字符串連接,只有當兩者都字符串文字作品,即

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

因爲@"foo"@"bar"是字符串常量,但

@"foo" (@"bar")  is compiler error 
因爲在之間的 (

。這與你的情況是一樣的。在這種情況下,你最好將兩者連接起來的字符串在運行時:

#define LoginPageUrl [BaseURL stringByAppendingString:(QueryStringParam)] 

或強制編譯器通過組合的BaseURL和QueryStringParam

#define LoginPageUrl \ 
    ((UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) ? \ 
     BaseURL @"deviceType=iPad" : \ 
     BaseURL @"deviceType=iPhone") 
+0

由於看到兩個相鄰的字符串文字!這爲我清除了一些東西。我做到了令人滿意的工作。 –