我正在尝试在设置两个定义中的一个或两个时禁用自动崩溃日志报告:DEBUG用于我们的调试版本,INTERNATIONAL用于国际版本.但是,当我尝试在#ifndef情况下执行此操作时,我会在#ifndef指令结束时收到警告Extra标记,并且运行DEBUG定义将触发Crittercism.
#ifndef defined(INTERNATIONAL) || defined(DEBUG)
    // WE NEED TO REGISTER WITH THE CRITTERCISM APP ID ON THE CRITTERCISM WEB PORTAL
    [Crittercism enableWithAppID:@"hahayoudidntthinkidleavetherealonedidyou"];
#else
    DDLogInfo(@"Crash log reporting is unavailable in the international build");

    // Since Crittercism is disabled for international builds,go ahead and
    // registers our custom exception handler. It's not as good sadly
    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
    DDLogInfo(@"Registered exception handler");
#endif

这个真值表显示了我的期望:

INTL defined | DEBUG defined | Crittercism Enabled
     F       |      F        |    T
     F       |      T        |    F
     T       |      F        |    F
     T       |      T        |    F

这之前它只是#ifndef INTERNATIONAL.我也试过没有定义的(blah)和括号围绕整个语句(分别是相同的警告和错误).

如何从编译器中获得我想要的行为?

解决方法

你要:
#if !defined(INTERNATIONAL) && !defined(DEBUG)
    // neither defined - setup Crittercism
#else
    // one or both defined
#endif

或者你可以这样做:

#if defined(INTERNATIONAL) || defined(DEBUG)
    // one or both defined
#else
    // neither defined - setup Crittercism
#endif

ios – 使用ifndef和||进行条件编译不会遇到第二种情况的更多相关文章

  1. Xcode:用于条件DEBUG / TEST代码的预处理器宏

    我在我的代码(例如AppDelegate.m)中有不应该为单元测试编译的部分,例如当您在创建新项目时选择“添加单元测试”时,目标是由Xcode设置的.在项目文件中,我已将标志CONfigURATION_TESTS添加到内置目标的MyAppTests的预处理器宏中,但未添加到MyApp目标.这是我发现的许多帖子中的建议方式.但是这不起作用,因为(我猜)MyAppTests目标将MyApp目标作为依赖

  2. Swift 条件编译

    在C系语言中,可以使用#if或者#ifdef之类的编译条件分支来控制哪些代码需要编译,而哪些代码不需要。Swift中没有宏定义的概念,因此我们不能使用#ifdef的方法来检查某个符号是否经过宏定义。但是为了控制编译流程和内容,Swift还是为我们提供了几种简单的机制来根据需求定制编译内容的。Swift内建了几种平台和架构的组合,来帮助我们为不同的平台编译不同的代码,具体地:方法os(),可选参数OSX,iOS方法arch(),可选参数x86_64,arm,arm64,i386注意这些方法和参数都是大小写敏

  3. 使用Swift如果允许使用逻辑AND运算符\u0026\u0026

    我们知道,我们可以使用一个iflet语句作为速记,检查一个可选的nil然后unwrap。但是,我想使用逻辑AND运算符&&&&所以,例如,在这里我做可选链接解开和可选的我的rootViewController到tabBarController。尝试了各种句法变化,每个都给出不同的编译器错误。从Swift1.2开始,这是可能的。另一个例子,这次将AnyObject转换为Int,解包可选,并检查解包的可选符合条件:

  4. 如何使用PHP // Thread // Mutex // Cond

    PHP显然现在支持Thread类.还有一个Mutex和Cond课程.然而,需要用良好的选项编译它并添加PECL扩展来获得它.有一个很好的教程从哪里开始?清楚显示每个类别/方法合理使用的东西.我只是不知道如何处理这些类.我需要一些具体的例子来做非常简单的事情,展示尽可能多的方法.谢谢.它已经发布,可用于pecl,windows下载github页面…你不需要知道在PHP中运行线程的条件或互斥,pthreads包括简单易用的一切……

  5. 正则表达式--Java

    正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。因为正则表达式是一个很庞杂的体系,所以我仅例举些入门的概念,更多的请参阅相关书籍及自行摸索。)在使用Pattern.compile函数时,可以加入控制正则表达式的匹配行为的参数:PatternPattern.compileflag的取值范围如下:Pattern.CANON_EQ当且仅当两个字符的"正规分解"都完全相同的情况下,才认定匹配。

  6. 在PHP中输出真值表

    它返回一个二维数组,其中每个’row’都有$count个元素.您可以使用它来生成表格.编辑:Codepad,具有将数组转换为表格的附加功能.

  7. 使用Xcode中的MACOSX_DEPLOYMENT_TARGET为Cocoa应用程序进行条件编译

    我是否对条件编译有一些根本的误解?

  8. ios – 使用ifndef和||进行条件编译不会遇到第二种情况

    解决方法你要:或者你可以这样做:

  9. 难以理解Java规范

    >,但是列表必须在不同类型上参数化.这会导致编译时错误,因为S无法同时满足List和列表接口.

  10. Java中是否存在零时间启动(无重新编译)可切换条件标志?

    我正在寻找一种方法来提供最快if条件的可能On/Off标志.当然,每次应用程序运行时,此条件只会更改一次–启动时.我知道可以条件编译“条件编译时常量”,并且可以从代码中删除整个条件.但是,无需重新编译源代码,最快的替代方案是什么?我可以将条件移动到单独的类和.jar.有条件的方法,我生成.jar的两个版本,并在应用程序启动时在类路径中打开那些版本?JIT是否会在单独的.jar中删除对方法的调用,如果发现该方法为空?

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部