【问题标题】:Precompiled Header with Constants issue带有常量问题的预编译头文件
【发布时间】:2012-08-16 15:53:49
【问题描述】:

我的项目中有一些常量文件“Constants.h”,我将它们包含在 Prefix.pch 文件中,以供项目中的所有类使用。它们只包含一堆#define 语句。

我的类无法识别这些常量(没有自动完成功能),并且每次使用它们时 Xcode 都会给我“未声明的标识符”错误。但是,当我运行项目时,一切正常(设置为忽略错误)。

有什么办法可以消除这些警告吗? #pragma 在前缀文件中忽略它们还是什么?我尝试了很多选项,包括在构建设置中将“预编译前缀标头”设置为 NO。

有什么想法吗?

编辑: 我试过删除派生数据和清理/删除构建文件夹无济于事。

值得注意的是,我的项目中有 3 个目标,并且该项目中有另一个项目。

此外,一些#imports 导入普通类。就像 UIFont 上的类别扩展和 Analytics 类。这会影响它吗?

【问题讨论】:

  • “未声明的标识符”是错误,而不是警告。您不能使用未声明的标识符编译和运行程序。
  • 已编辑以纠正该问题,我的意思是错误。我将它设置为忽略错误,因此程序仍然可以编译并运行良好,xcode 只是在我编辑代码时给我这些错误。
  • 而且它在构建后无法立即识别它们,通常只有当我在使用这些常量的类中时它才会开始看到“错误”
  • 您究竟设置了什么“忽略错误”?您不能编译和运行包含错误的程序。
  • “回答你自己的问题”比编辑问题本身并将其标记为“已解决”要好,这样它就不会出现在“未回答的问题”列表中。

标签: objective-c xcode constants prefix undeclared-identifier


【解决方案1】:

要解决此问题,我必须在目标的构建设置中将“预编译前缀标头”标志更改为 NO。通过这样做,您将失去通过缓存已编译头文件实现的任何构建性能,但在我的情况下,我的 Prefix Header 非常小,因此我不会在构建所需的时间内看到任何影响。

【讨论】:

  • 这也为我解决了这个问题,但它确实使编译速度大大降低。有什么办法可以避免吗?
【解决方案2】:

尝试删除项目派生数据。 Xcode 有时需要重新索引您的项目以删除诸如此类的“错误”。

组织者 > 项目 > 您的项目

点击派生数据行右侧的“删除”按钮。

立即退出 Xcode,然后重新打开。

【讨论】:

  • 已经试过很多次了。还尝试删除构建文件夹,清理等。不断回来。
  • 解决了我被困了一个小时的问题。
【解决方案3】:

我让 PCH 文件导入了包含很多宏的 .h 文件(具体来说,我使用了 MJGAvailability 标头,当我使用比我的部署目标更新的功能时会发出警告)。 替换:

#import "MJGAvailability.h"

#include "MJGAvailability.h"

为我解决了这个问题。

【讨论】:

    【解决方案4】:

    我的一个目标中有一个预处理器宏,我将它从“预处理器宏”移动到“未在预编译头文件中使用的预处理器宏”,从而解决了问题。

    【讨论】:

      猜你喜欢
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 2012-07-09
      • 2012-05-27
      • 1970-01-01
      相关资源
      最近更新 更多