Objective c iPhone项目常数

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 问题是这段代码在某些文件中有效,而在其

我想在我的项目中有一个常量在Lite和Pro版本之间进行更改。我不认为这是最好的方法,但我正在努力:

  • 在我的应用程序代理中添加常量

    #define BUILD_PRO 1 //0 => LITE, 1 => PRO
    
  • 需要时,导入appDelegate并对其进行测试:

    #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添加到“预处理宏”部分
    这样,您就不必更改任何头文件,只需构建lite或full目标。如果您需要在产品的任何位置添加pro功能,只需使用:

    #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)。没关系,我发现了问题:我必须选择设备,而不是模拟器来找到宏预处理器部分,现在它工作得很好