Objective c iPhone项目常数
我想在我的项目中有一个常量在Lite和Pro版本之间进行更改。我不认为这是最好的方法,但我正在努力:Objective c iPhone项目常数,objective-c,iphone,xcode,c-preprocessor,constants,Objective C,Iphone,Xcode,C Preprocessor,Constants,我想在我的项目中有一个常量在Lite和Pro版本之间进行更改。我不认为这是最好的方法,但我正在努力: 在我的应用程序代理中添加常量 #define BUILD_PRO 1 //0 => LITE, 1 => PRO 需要时,导入appDelegate并对其进行测试: #import "myAppDelegate.h" 后来 #if (BUILD_PRO==1) NSLog(@"this is pro version"); #endif 问题是这段代码在某些文件中有效,而在其
#define BUILD_PRO 1 //0 => LITE, 1 => PRO
#import "myAppDelegate.h"
后来
#if (BUILD_PRO==1)
NSLog(@"this is pro version");
#endif
从同一个项目中获得两个版本(pro和lite)的正确方法是什么 一种方法是为专业版设置一个目标,为轻型版设置一个目标。然后在pro版本的预处理器宏下的生成设置中声明常量 然后在代码中可以执行以下操作:
#ifdef BUILD_PRO
//super awesome pro code here.
#endif
是的。预处理器定义是实现这一点的方法 我认为它在某些文件中工作,而在其他文件中不工作,因为有些文件可能不包含myAppDelegate.h文件,因此无法获得定义。我建议定义一个“Lite版本”和“Pro版本”目标,并在每个目标的构建配置中设置预处理器变量 创建lite目标后(只需选择“Pro版本”目标上的复制目标上下文菜单项即可创建lite目标):
- 进入项目/编辑目标“Pro版本”菜单项
- 转到build选项卡并找到预处理部分(朝向底部)
- 将BUILD_PRO=1添加到“预处理宏”部分
#ifdef BUILD_PRO
// do some pro stuff
#endif
我在AppDelegate.m的头中声明了一个变量:
int DEVICE_TYPE;
然后在我的AppDelegate中的ApplicationIDFinishLaunching中,我调用:
- (void) setDeviceType {
NSString* machineType = [[UIDevice currentDevice] machine];
if ([[[UIDevice currentDevice] model] isEqualToString:@"iPod touch"]) {
DEVICE_TYPE = IPOD_TOUCH;
} else if ([machineType isEqualToString:@"iPhone1,2"] ||
[machineType isEqualToString:@"iPhone1,1"]) {
DEVICE_TYPE = IPHONE3G;
} else {
DEVICE_TYPE = IPHONE3GS;
}
}
是的,这是正确的地方。这可能与需要重建的预编译头或其他东西有关,但无论如何我不会使用头。使用内置目标。。。请看下面投票最多的答案。+1这是最好的答案,因为它是在构建配置中定义的,这是一种Xcode,相当于在Makefile中执行它,而Makefile就是使用“make”正确执行操作的方式。请注意,人们通常只使用“#define FOO”然后使用“#ifdef FOO”。。。“#endif”not“#define FOO 1”和“#if(FOO==1)”虽然从逻辑上来说这并不重要。谢谢,回答得好,但我没有找到我在本教程后面的“预处理宏”部分。我放了“所有配置”并选择了基本SDK,如教程中所述,但我没有看到“预处理宏”我看到的部分是“Info.plist其他预处理器标志”、“Info.plist预处理器定义”、“Info.plist预处理器前缀文件”(我使用的是iphone_sdk 3.1.2和xcode 3.1.4)。没关系,我发现了问题:我必须选择设备,而不是模拟器来找到宏预处理器部分,现在它工作得很好