17

在我的一个项目中,我在 Xcode 中遇到了一个相当奇怪的问题。

当我开始编写代码时,我习惯于自动完成为我建议大量条目。由于某种原因,从昨天开始,这已经停止工作。我现在得到奇怪的自动完成条目,例如“and”、“the”、“Andy”、“MyCompanyName”等。

这种情况以前从未发生过,所以我很困惑为什么现在会发生这种情况,而且只发生在我的一个项目上。我在这个网站上搜索了很长一段时间的任何修复,我试图清理派生数据,退出 Xcode,从 Xcode 项目中删除工作区和用户文件并重新启动,但这样做之后,自动完成工作了一段时间,然后在大约 30 秒的编码后再次中断。

我有时可以看到自动完成的解决方案,但只是纯文本(没有类指示符),有时它会完全停止工作。

有没有其他人经历过这样的事情并且可以提供一些解决方案?

4

8 回答 8

44

很长一段时间以来,我一直在为一个不断丢失自动完成和语法突出显示的项目而苦恼。删除 Derived Data 文件夹并重新启动 Xcode 会暂时修复它,最终这几乎变成了肌肉记忆。使用包含多个项目的工作区似乎加剧了我的问题,其中许多项目相互依赖。事实证明,问题出在 clang 索引器上。该项目可以干净地编译,但查看索引器的输出时却充满了错误。解决所有这些问题解决了我的问题。

在做任何事情之前:确保您的工作区中所有项目中的所有目标都能干净地编译。那是没有任何警告的。这对我来说是一个很大的失败——我有旧的目标,只是没有编译干净。其中一些是未使用的,可以删除,另一些是非 ARC,在已转换为 ARC 的目标中使用模块(也转换了这些目标),还有一些只需要修复代码。

一旦你解决了所有这些问题,我们需要知道的第一件事是索引器失败的地方,通过对你的项目做一个完整的索引。

  • 首先,确保 Xcode 已关闭,然后通过在终端中输入来调高索引器警告消息级别:

     defaults write com.apple.dt.Xcode IDEIndexingClangInvocationLogLevel 3
    
  • 然后为您的项目/工作区找到 Derived Data 文件夹(可能是~/Library/Developer/Xcode/DerivedData/您的项目名称-一些乱码),然后将其删除(但保持 Derived Data 文件夹打开,因为您可能不得不去回来做几次。

  • 接下来,打开控制台应用程序并单击清除显示,并将过滤器设置为“IDE”以仅显示我们感兴趣的消息。

  • 最后,打开 Xcode 和导致问题的项目/工作区,您会看到控制台开始填满消息。

  • 要查找错误,请将控制台过滤器更改为“错误:” - 我们的目标是将这些减少到零。

  • 我发现的大多数错误都是缺少头文件。Xcode 本身似乎比索引器更聪明。它似乎能够从索引器无法找到的其他项目中找到并包含头文件。

  • 因此,在您看到“致命错误:'somefile.h' 文件未找到”的任何地方,请确保将该文件的路径添加到目标构建设置中的用户标头搜索路径。我发现这样做的最好方法是双击该字段以获取弹出窗口,然后将文件夹从查找器拖到其中。这会添加一个新条目,但假设它在同一个工作区中,它会添加一个相对文件路径(这对于您将来移动工作区文件夹很重要)。如果同一个项目有多个目标,则可以在项目而不是目标级别设置搜索路径,并将目标搜索路径设置为$(inherited)

  • 您可能在使用库或框架时遇到类似问题 - 再次更新相应的搜索路径。

  • 一旦你修复了一些错误,关闭 Xcode,清除控制台,删除项目的派生数据,打开 Xcode 并让它再次索引。

  • 重复,直到你所有的错误都消失了。

一旦你在这个好地方,代码自动完成和语法突出显示应该就像一个魅力:)

于 2012-04-20T11:10:52.870 回答
5

在 Xcode 4.3.2 上偶尔会发生在我身上,

我只是这样做:

Xcode > Organizer > Projects > 选择你的项目 > Derived Data > 点击删除按钮

这也会删除索引。然后我通常会重新启动 Xcode 并开始重新索引,然后我会再次获得语法高亮和自动完成功能。(我什至不总是重新启动 Xcode - 但是一个借口从屏幕上开始几个小时对你的 glazball 来说总是一件好事!)

这种情况很少发生,这是相对无痛的。

于 2012-06-04T17:17:03.373 回答
4

大多数时候我遇到这个问题,删除 DerivedData 会为我修复它,但有一种情况没有。轮流我无法将我创建的源文件连接到任何特定目标。一旦我将它连接到目标源突出显示开始工作。如果其他解决方案不起作用,这可能是您的问题。

于 2013-03-06T06:13:17.980 回答
3

在构建设置中搜索“GCC_INCREASE_PRECOMPILED_HEADER_SHARING”并将其更改为“是”。- 这对我有用。

GCC_INCREASE_PRECOMPILED_HEADER_SHARING

于 2013-09-05T11:02:28.157 回答
2

它真的很尴尬。我错误地取消了 Xcode Preferences> Text Editing> Code Completion 中的复选标记,并尝试了所有可能的解决方案。

在深入研究任何其他解决方案之前,请检查此首选项:

Xcode 自动完成首选项

于 2013-11-18T10:55:59.790 回答
0

您可以通过以下方式解决此问题:

  1. 注释掉项目的 .pch 文件中的所有条目(通常当你这样做时,Xcode 现在会选择自动完成)
  2. 清理项目
  3. 取消注释 .pch 文件
  4. 重建项目

现在您应该能够看到正确的语法突出显示并且自动完成应该是正确的。

于 2012-03-30T09:35:35.947 回答
0

仅删除失败项目的派生数据是不够的

我不得不删除所有项目的所有派生数据,做了一个清理项目并重新启动 Xcode

惊人的

于 2014-11-19T16:17:10.777 回答
0

这是什么东西?我没有收到File not found来自编译器的任何错误。通过删除一些丢失的文件链接UnitTest来修复这个问题。UITestTargetCompiler SourcesProject's Build Phases

在此处输入图像描述

于 2017-05-15T09:27:51.570 回答