【问题标题】:Reference to 'X' is ambiguous对“X”的引用不明确
【发布时间】:2014-10-12 06:17:05
【问题描述】:

在对我的项目进行多次更改后,我突然收到此构建错误:

对“kCGImageAlphaPremultipliedLast”的引用不明确

当查看错误时,它显示它被引用了 4 次:

有人能告诉我这是怎么发生的吗?我怎样才能弄清楚是什么原因造成的?我没有从 CoreGraphics 明确导入任何东西,我的前缀文件只导入“Foundation.h”和一些自制的宏。然而,我导入了几个包含纯 C 代码的头文件,但它们都封装在这样的东西中:

#ifndef __MYCCODE_H
#define __MYCCODE_H
// imports here
// c code here
#endif

这发生在使用 LLVM 5.1 的 Xcode 5 中

编辑:这似乎是这个项目的另一个问题。在评论这行代码后,我得到另一个错误:

格式错误或损坏的 AST 文件:'无法加载模块“/Users/xxx/Library/Developer/Xcode/DerivedData/ModuleCache/1NHZ5MC2OSMJV/CoreImage.pcm”:模块文件已过期'

删除模块并再次添加没有帮助。删除派生数据也无济于事。回到工作提交时也会出现此错误。

【问题讨论】:

  • 请发布您的代码而不是屏幕截图
  • @Raptor 对我来说,这个问题似乎隐藏在项目的某个地方,而不仅仅是在这个函数中,我不能在这里发布我的整个项目。我也在其他项目中使用相同的功能,但那里没有发生。
  • 我认为您在代码中的某处写了“包含”而不是“导入”。
  • @Cy-4AH 我没有,但我也更新了我的问题,因为刚刚发生了一些不同的事情
  • 尝试清理您的构建并从设备中删除应用程序。然后再次运行构建

标签: ios objective-c xcode5


【解决方案1】:

好的,在创建一个新项目并将所有内容处理到该项目后,构建成功,但是我再次收到此“格式错误或损坏的 AST 文件”错误,但可以通过以下方式解决:

  • 清理项目
  • 删除“~/Library/Developer/Xcode/DerivedData/ModuleCache/”中的所有内容(管理器窗口中的按钮对我不起作用)
  • 再次清洁
  • 构建项目

之后它工作得很好,只是我必须不时进行此修复

我还对旧项目进行了比较,似乎有很多框架和其他旧东西在测试时被卡在那里,所以如果你有这个,请检查你的项目设置文件中的旧东西。

我以为 xcode 和我有一天可以成为朋友。猜不着……

【讨论】:

  • 我花了好几个小时试图解决我的问题。非常感谢你做的这些。我不能说我明白发生了什么,但我的项目可以编译。谢谢十亿!
  • 我的项目构建得很好,但我被这些错误所困扰,这些错误使我无法使用任何类型的自动完成功能并迫使我应用“运行时调试”。没有其他帖子直接解决了这个问题——谢谢!
  • 太好了,这个答案应该会得到更多的投票,(组织者窗口内的按钮也对我不起作用)
  • 我在一个多项目工作区中遇到了类似的问题,它正在成功构建,但 then 抱怨枚举“对 的引用不明确”在我最底层的公共库/框架中。所以构建没有问题,但是我的问题导航器中显示的所有这些烦人的错误都不是“真正的错误”。像这里描述的那样吹掉 ModuleCache 为我修复了它,谢谢! (我不需要创建新项目或工作区。)
  • @Yossi 我已经好几年没碰过mac/ios了,但曾经有一个项目->干净的菜单点(在构建旁边)
【解决方案2】:

这可能是你这样导入的:

#import "xxxx.h"

我通过这个修复它:

#import

【讨论】:

    【解决方案3】:

    当我两次导入头文件时,我遇到了这个问题。删除其中一个后,问题就消失了。

    【讨论】:

    • 哇,没想到重复导入会抛出这样的错误..
    • 这也是我的情况。但原因是我添加了use_frameworks!到我的 podfile。解决方案是从文件中删除旧的导入。
    【解决方案4】:

    对于仍在为问题苦苦挣扎的人:建议的解决方案中没有一个在我的情况下有效。我正在使用 Carthage 编译我的所有框架,并且每当我导入使用我的主项目也使用的框架的框架的标头时,我的主项目中都会出现这些错误。最终解决它的是在主项目上禁用“模块”。

    【讨论】:

    • 这对我有用,而上述建议的解决方案都不适用于我的情况:))
    【解决方案5】:

    删除 use_frameworks!从 pod 文件修复我的模棱两可的问题。

    【讨论】:

      【解决方案6】:

      这里的一些解决方案很好,但使用框架!这正是我现在所需要的,即使你让这个问题发生了。但是当我使用框架并且像这样引用两次标头时,看起来构建不喜欢

      #import "TSMessage.h"
      #import "TSMessage+CSExtension.h"
      

      但是当它像这样编译时问题就解决了

      #import "TSMessage+CSExtension.h"
      

      【讨论】:

        【解决方案7】:

        使用

        #import "anyviewcontroller.h"
        

        而不是任何模块

        @import anymodule;
        

        我正在使用 LGSideMenuController,当我第一次集成它时,它运行良好,但我不知道为什么一段时间后出现此错误。

        所以我将模块@import LGSideMenuController; 替换为头文件这样 #import "UIViewController+LGSideMenuController.h"

        错误消失了。

        【讨论】:

          【解决方案8】:

          我的构建报告中出现了相同的警告(但仅在三角形下方)。最后,对我有用的是确保每次使用:

          #import <Module/Module.h> 
          

          在应用中被替换为:

          @import Module;
          

          现在所有那些烦人的警告都消失了!

          【讨论】:

            猜你喜欢
            • 2017-02-04
            • 2016-10-17
            • 1970-01-01
            • 1970-01-01
            • 2023-02-03
            • 2015-12-06
            • 1970-01-01
            • 1970-01-01
            • 2019-12-22
            相关资源
            最近更新 更多