【问题标题】:iOS - conditional compilation (xcode)iOS - 条件编译 (xcode)
【发布时间】:2011-01-03 14:28:05
【问题描述】:

我为最初的 iphone 应用程序创建了一个额外的 iPad 目标。

来自 Apple 文档: “几乎在所有情况下,您都需要定义一个新的视图控制器类来管理 iPad 版本的应用程序界面,尤其是当该界面与您的 iPhone 界面完全不同时。您可以使用条件编译来协调创建不同的视图控制器。”

但是他们没有给出任何关于条件编译是什么的例子或细节。谁能举个例子?我会在哪里做呢?

编辑: 我尝试在 iPad 目标中定义以下 C 标志:-D USE_IPAD、-DUSE_IPAD。 无论哪种方式,此代码总是导致 IPHONE 被记录:

#ifdef USE_IPAD

        NSLog(@"IPAD");

    #else

        NSLog(@"IPHONE");

    #endif

我错过了什么?

【问题讨论】:

    标签: ipad ios conditional compilation


    【解决方案1】:

    另一种可能优于条件编译的方法是直接的if else 语句:

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        // iPad code
    } else {
        // iPhone or iPod Touch code
    }
    

    我更喜欢这个而不是条件编译,因为我发现它更容易维护并且线路噪音更少。

    【讨论】:

      【解决方案2】:

      Conditional compilation 是您使用编译器指令(或编译器标志)来控制编译的地方。

      #ifdef SOME_CONDITION
      
      //This will only be compiled if SOME_CONDITION is defined as a compiler flag
      
      #else
      
      //Otherwise, this code will compile.
      
      #endif
      

      您可以在项目设置中定义编译器指令。 右键单击您的 Target(例如,创建多个目标,一个用于 iPhone,一个用于 iPad)并点击获取信息。然后向下滚动到Other C Flags。您可以在此处添加 (a) 标志。

      编辑:

      看来我犯了和你一样的错误。一些快速的谷歌搜索将我带到Apple documentation andthis blog post,它说您可能需要在构建设置中添加一个新字段。

      【讨论】:

      • 我在哪个目标中定义 C 标志? iPhone 或 iPad 目标?
      • 好吧,您将为每个目标创建一个目标,然后在 iPhone 目标中指定 iPhone。在 iPad 中,您将指定 iPad。或者,您可以在您想要的任何一个中指定它,然后将 #else 设置为另一个。
      猜你喜欢
      • 2023-03-30
      • 2016-11-19
      • 2011-07-23
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      相关资源
      最近更新 更多