各位编码员...


我在应用程序的全局常量文件中设置了服务器网址。
我的应用程序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时,编译器将使用生产常数。

这还具有将调试代码与生产代码分开的好处(您应避免将二进制代码和二进制代码都包含在二进制文件中,因为这可能会带来整个问题和安全性问题)。

希望这可以帮助。

08-26 17:03
查看更多