1

我有一个通用 iOS 应用程序,可以将某些页面加载到 UIWebView 中供用户查看。现在 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

这里的第二个宏会抛出编译错误“调用的对象类型 NSString* 不是函数或函数指针”

那么我可以使用宏来解决我的问题吗?在宏中使用三元运算符的正确语法是什么?

4

1 回答 1

4

与相邻字符串文字的字符串连接仅在两者都是字符串文字时才有效,即

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

因为@"foo"and@"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")
于 2012-10-23T07:58:43.563 回答