Xcode:代码丢失语法颜色


80

我发现在各种情况下,Xcode 3.1(Leopard)中的Objective-C代码在键入后可能无法获得适当的语法颜色,或者失去原来的颜色。

这不仅仅是使用新的自定义符号的“刷新”问题-还会影响Cocoa框架符号。

有时,在代码页上选择所有文本的CMD-a将使颜色(重新)出现,有时双击一行以将其选中将起作用,有时我必须在符号中添加/删除空格以获取该符号变色。重建或关闭/重新打开项目可能会,也可能不会。

这是Xcode的已知问题吗?对于让我感到烦恼的事情,我找不到关于SO以及我期望的其他地方的大量讨论。

是否有命令强制全局语法重新着色?


Answers:


148

1.)转到项目->构建设置->标头搜索路径

2.)添加“ $(SRCROOT)/ **”

3.)关闭并重新加载项目

4.)转到Xcode->窗口->组织者->项目-> $ YourProject->删除派生数据

5.)等一下,直到XCode重建所有索引


要获取更多信息,请激活详细日志记录:

1.)在终端应用程序中增加Xcode日志级别:默认写com.apple.dt.Xcode IDEIndexingClangInvocationLogLevel 3

2.)打开控制台应用程序。搜索“ xcode”

3.)我看到pch文件中提到的头文件出现“找不到文件”错误(因此,上面的修复程序)


2
您的答案的第二部分非常有帮助!
丹尼斯·米哈伊洛夫

2
我今年在WWDC的实验室中的经验是,如果您希望突出显示语法,请完全关闭预编译...虽然对我有用,但似乎修复不充分
Stew

谢谢@Lars schneider。它的好方法。
2012年

2
非常感谢!#4(删除派生数据)也对我有用。
Mark Mckelvie 2012年

1
这在Xcode 8.3中对我有用,而以前在8.2下工作的另一个解决方案停止了恢复语法突出显示。伟大而永恒的答案!
阿德里安

43

我在一个项目中遇到了同样的问题,该项目在Xcode 3中很好,并且在Xcode 4中语法突出显示和代码完成已中断。花了我大部分时间来解决这个问题,但是我发现以下步骤可以解决为我复制/修复此问题100%。

在尝试了所有上述解决方案后,我尝试从头开始创建项目,然后艰苦地重新导入每个文件和文件夹。每次导入几个文件时,我都会检查并仍然突出显示语法。即使在最后几个之后,它仍然可以。然后,我遇到了一个失败的构建,因为我忘记了在旧项目中的项目.pch文件中包括几个常见的头文件。那就是CodeSense再次崩溃的时候。

经过进一步调查,我们发现,如果导入的头文件又导入了与.pch相同的框架头文件,则CodeSense将会中断。相同的设置在Xcode 3中没有引起任何问题。

例:

project.pch

#import <Foundation/Foundation.h>
#import "projectConfig.h"

projectConfig.h

#import <Foundation/Foundation.h>
#import "one.h"
#import "two.h"

因此,通过删除完全不必要的

#import <Foundation/Foundation.h>

您可以通过“ projectConfig.h”中的指令修改突出显示内容,并且代码补全功能也会重新出现。如果您的问题与我的相同。


是的...只是有相同的问题...愤怒的解决方案将其修复。
2012年

4
为什么不将它投票给平流层呢?我没有理会清理所有标头问题,而是为目标关闭了Precompile Prefix Header选项,一切都很好。最后,我可以将整个团队升级到4.2,因为那是我们失败的地方。
罗布·布斯

2
有用!我所做的与@Rob Booth相同,我关闭了“ Precompile Prefix Header”(将其设置为NO),清理了我的项目并删除了它的派生数据。我的语法高亮重新开始工作!
hbobenicio 2012年

这解决了我的问题。我的不是Foundation文件,而是自定义类。我只是将其从.pch文件中删除,然后读取并在其他类文件中删除了它的所有实例。
Bot 2012年

谢谢你 :)我完全按照您的描述。从我在.PCH中导入的所有文件中删除了Foundation和UIKit。
Timo 2012年

15

只需选择丢失语法着色的文件,然后按“编辑器”>“语法着色”>(选择您的语言(例如,Objective c ++)而不是“默认”即可。


2
这发生在我身上。不知道为什么XCode会默认只使用Generic而不是仅对一个文件使用正确的文件类型,但是这一步解决了。我曾尝试清理并首先删除派生数据,我认为这是罪魁祸首。
鲁迪

欢呼...苹果为我选择了AppleScript大声笑谢谢
Bikram Thapa'Mar

7

我发现重新获得语法着色的最好方法就是退出Xcode并重新启动它。我无法告诉您原因,但这每次都能奏效。


1
对我来说,重新打开该项目就足够了。
thgc 2011年

那有多疯狂!它不仅修复了以前失败的类别,而且还开始起作用
Judioo 2012年

4

我发现以下通常可以解决问题……

在“构建设置”中“重新选择”“基本SDK”和“架构”。 (在“浏览器模式”下,1单击左上角的蓝色项目图标,然后单击项目设置,然后将其中的内容弄乱。

确保他们都排成一列/在您呆在那里的时候在其中进行一些摆动-摆动是无害的……您知道一点点混在一起。您会注意到xCode的微型笔画非常小巧-每次在64位和32位之间切换时...通常这是在我知道夜间代码突出显示是否已消失或者我是否准备好。

通常,我会遇到一个项目,该项目会立即以32位模式突出显示,并以64位坐在那里……谁知道呢。。


1
答案对我有很大帮助,并起作用了……但是您的写作风格可以改善:)
ItalyPaleAle 2012年

回想起来,是的,对于任何非英语母语的人来说,这个答案的确是难以理解的。las,对我来说...是山上空球
亚历克斯·格雷

3

选择项目->构建设置选项卡-> Apple LLVM语言5.0->将前缀标头预编译为YES。NSLog没有突出显示。当前正在运行Xcode 5.0.1,希望对您有帮助=)谢谢@rebelzach



2

这似乎是与此问题类似的错误

通过在构建设置中将设置Precompile Prefix HeaderNo,我可以解决此问题。


1

我最近遇到了一个类似的问题,所有的着色和自动完成功能都不再适用于内置框架,而我自己的类仍然可以使用。有人建议我在构建设置中关闭“运行静态分析器”。很奇怪,但是有效。


1

对我来说,是我重命名了项目,并且Tests目标仍然指向旧的pch位置,但是我的App目标却指向了新的pch位置。

如果您的应用程序委托仍然具有代码意义,那么您也可能会遇到这种情况。进入项目,选择“测试”目标搜索“前缀”,并将其设置为“应用”目标中的等效值。


0

打开项目设置(“项目”>“编辑项目设置”菜单),然后在“常规”选项卡中单击“重建代码感知索引”按钮。这将重新创建Xcode用于语法着色的索引。

对于较大的项目,此过程可能需要一段时间,因此您可以在“活动”窗口(“窗口”>“活动”菜单)中检查进度。


2
一次又一次,这并不能解决我的问题。我一定做错了,因为XCode根本不会打扰突出显示语法或显示自动完成功能。
Jessedc

1
请确保您针对这些问题记录了针对Apple的错误:bugreport.apple.com。
林德西·弗格森

0

此外,在XCode4中,没有用于重建代码检测索引的按钮。


我在某处读到这可能是因为XCode4不再需要代码检测索引。我认为它直接使用新的Clang语法分析,而不是保留单独的索引。这也是为什么代码建议更加准确的原因,因为它仅建议从编译器的角度来看有意义的代码完成。
markquezada 2011年


0

我遇到了同样的问题,并通过更新构建设置以使用系统默认编译器LLVM GCC 4.2解决了此问题。

似乎有多种因素。


0

我也遇到了这个问题,并尝试了“重建索引”,“重新启动XCode”,“将编译器设置更改为LLVM GCC 4.2”的解决方案。那些没有帮助我。

因此,我尝试立即添加以下代码以及头文件的全新创建。

#include "header.h"

using namespace cocos2d

然后,将先前添加在头文件中的代码着色,并可以识别类和内容。

我使用过cocos2d-x,因此我的语法基于c ++。我还没有用Objective-c进行测试。


0

因为仍然有人不知道为什么。用XCode 8.2打开,它应该可以工作

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.