【问题标题】:iPhone compile dependent on targetiPhone编译依赖于目标
【发布时间】:2010-12-18 17:18:49
【问题描述】:

我的项目包含多个客户的多个目标,但大多数应用程序都非常相似,到目前为止,我能够通过在运行时读取的属性列表来控制不同的程序流程。

一个客户有一个特定的视图,我需要在所有其他人之前展示它。

我的问题是我收到构建错误(实际上是链接错误),因为控制器类不在其他客户端目标中,我也不想包含它。所以我一直在寻找一些编译时间控制。

我正在寻找类似的东西

#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

【问题讨论】:

    标签: iphone objective-c xcode target


    【解决方案1】:

    打开一个目标的设置并转到“预处理器宏”设置任何你喜欢的东西,例如CLIENT_ONE

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

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

    以下是目标构建设置的屏幕截图:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      • 2012-07-16
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多