我正在使用Xcode 5并尝试制作我的应用程序的精简版和付费版。我复制了目标并将预编译器宏设置为IS_PRO = 1 AND IS_LITE = 1。然后我在我的App Delegate中添加了以下代码。
if (self.window.frame.size.height == 568)
{
#ifdef IS_PRO
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"iPhone5" bundle:nil];
UIViewController *viewController = [storyBoard instantiateViewControllerWithIdentifier:@"iPhone5"];
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];
return YES;
#else
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"iPhone5 Lite" bundle:nil];
UIViewController *viewController = [storyBoard instantiateViewControllerWithIdentifier:@"iPhone5 Lite"];
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];
return YES;
#endif
}
else
{
#ifdef IS_PRO
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"iPhone3.5" bundle:nil];
UIViewController *viewController = [storyBoard instantiateViewControllerWithIdentifier:@"iPhone3.5"];
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];
return YES;
#else
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"iPhone3.5 Lite" bundle:nil];
UIViewController *viewController = [storyBoard instantiateViewControllerWithIdentifier:@"iPhone3.5 Lite"];
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];
return YES;
#endif
}
然而,唯一有效的是#ifdef和#else之间的代码。 #else和#endif之间的代码是白色的(不像Xcode接受代码时那样多色)。如果我删除预编译器宏并且只是尝试检测屏幕大小,此代码可以正常工作。
我还做了一个快速无关的测试,看看我是否可以让以下工作:
#ifdef IS_LITE
NSLog(@"LITE VERSION");
#else
NSLog(@"PRO VERSION");
#endif
我得到了同样的结果。 Xcode只会读取#ifdef和#else之间的代码,#else和#endif之间的代码是白色的。有人可以帮帮我吗?!?
答案 0 :(得分:0)
如果定义了宏,#ifdef
始终为true。它的值是0还是1。
它会像这样工作:
#if(IS_LITE)
NSLog(@"LITE VERSION");
#else
NSLog(@"PRO VERSION");
#endif
答案 1 :(得分:0)
必须为
中的每个目标定义预处理器宏目标 - >构建设置 - >预处理器宏。
当您构建特定目标时,将编译特定代码。