iPhone编译依赖于目标的问题

3
我有一个涉及多个客户端的项目,但大部分应用程序都非常相似,到目前为止,我能够通过在运行时读取属性列表来控制不同的程序流程。
其中一个客户端有一个特定的视图需要在所有其他视图之前显示。
我的问题是,我遇到了一个构建错误(实际上是链接错误),因为控制器类不在其他客户端的目标中,我也不想包含它。因此,我正在寻找一些编译时的控制。
我正在寻找类似于:
#ifdef client1target
     ... do something
#else
     ... do something else
#endif    

我遇到困难的程序部分目前看起来是这样的:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    NSString *client = [myEnvVariables getShortName]; // In this class method I read the plist

    if ([client isEqualToString:@"CLIENT1"]) {

        Client1SpecificController *mm = [[Client1SpecificController alloc] initWithNibName:@"Client1SpecificView" bundle:nil];
// here happens the compile error because Client1SpecificController is not known at other targets

        mm.view.frame = CGRectMake(0,20,320,460);

        [window addSubview:mm.view];
        [window makeKeyAndVisible]; 

    } else {

        [window addSubview:navigationController.view];
        [window makeKeyAndVisible]; 
    }

    return YES;
}

错误长这样
undefined symbols:
  "_OBJC_CLASS_$_Client1SpecificController", referenced from:
      objc-class-ref-to-Client1SpecificController in myAppDelegate.o
1个回答

9

打开一个目标的设置,进入“预处理器宏”选项,可以设置任何你喜欢的内容,例如CLIENT_ONE

然后你可以按照描述在你的代码中使用它。

#ifdef CLIENT_ONE
    #import "ClassOneController.h"
#else
    #import "OtherController.h"
#endif

这是目标构建设置的屏幕截图: 在此示例中添加 CLIENT_ONE = 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接