各位编码员...
我在应用程序的全局常量文件中设置了服务器网址。
我的应用程序plist中还有一个名为“ DebugMode”的变量,一旦切换,该变量将更改应用程序将使用的URL。
常数h
extern NSString * const LOGIN_URL;
常数m
NSString * const LOGIN_URL = @“ http://www.url.com”;
无论如何,我可以将下面的伪代码复制到目标C中?
if([[[[NSBundle mainBundle] infoDictionary] objectForKey:@"DebugMode"] boolValue] == NO)
{
NSString * const LOGIN_URL = @"http://www.production-url.com";
}
else
{
NSString * const LOGIN_URL = @"http://www.qa-url.com";
}
最佳答案
您的要求并不是完全可能的(至少不是您要求的方式)。在编译时会设置并建立一个常量(严格来说不是真的,但是为了解释方便,它会这样做),因此意味着在运行时由于某种原因不能将其更改。
根据调试和发布代码更改常量值的传统方法是通过预处理器。像这样:
#if __DEBUG_MODE__ == 1
NSString * const LOGIN_URL = @"http://www.qa-url.com";
#else
NSString * const LOGIN_URL = @"http://www.production-url.com";
#endif
现在,必须先定义
__DEBUG_MODE__
才能执行任何操作,并且有几种方法可以执行此操作。您可以将以下行添加到前缀头文件(.pch)#define __DEBUG_MODE__ 1 // Change to 0 to disable debug mode.
或将编译器标志
-M__DEBUG_MODE__=1
添加到您想要生效的文件中。这意味着,每当__DEBUG_MODE__
设置为1时,编译器将使用调试常数,而当其值为0时,编译器将使用生产常数。这还具有将调试代码与生产代码分开的好处(您应避免将二进制代码和二进制代码都包含在二进制文件中,因为这可能会带来整个问题和安全性问题)。
希望这可以帮助。