.mm文件中的Xcode语法着色破碎

时间:2011-12-05 20:30:37

标签: xcode syntax-highlighting objective-c++

我一直试图将这个问题调试好几周,但我没有取得任何进展。在我的一个项目中,我的.mm文件不再具有正确的语法着色,除了像@property,@ syntize和诸如BOOL,int,double等原始类型之类的东西.cpp文件很好。我已经尝试过几乎可以在网上找到的每一个“修复”。我已经:

  1. 在Organizer下删除了项目的“派生数据”。
  2. 在Finder中右键单击项目的.xcodeproject文件,选择“显示包内容”并删除除.pbxproj文件以外的所有文件。
  3. 产品>清洁
  4. 与编辑一起讨论>语法着色选项。
  5. 确保我的所有标头搜索路径都使用'$(SRCROOT)/'前缀。
  6. 确保从这些路径导入的所有头文件都是通过以下方式导入的:

    #import <header.h>
    
  7. 而不是:

        #import "header.h"
    

    我觉得我没有选择权。有没有其他人有一个与我已经尝试了数百次的事情有所不同的解决方案?没有正确的语法着色让我疯了。

    感谢。

    编辑:忘了提,我还查看了Console.app中的日志并看到了这个:

    Xcode [7623] [?T] IDEIndexingClangInvocation:无法保存PCH文件:/ Users / jinser / Library / Developer / Xcode / DerivedData / ABBYY_MenuApp-ezwvcbulelfqwkftuwttlogvxsym / Index / PrecompiledHeaders /OpenCV_iPhone_Prefix-bqbegypvoktytjhgrfdzxrzeamix_ast/OpenCV_iPhone_Prefix.pch.pth

2 个答案:

答案 0 :(得分:3)

你有没有修改.pch文件?如果您的.pch文件不严格正确,则可能会破坏索引器。例如,如果您使用#import "header.h",那么您确实需要#import <EmbeddedFramework/header.h>,这实际上可以在常规文件中正常编译(假设您的标题搜索路径设置为查找header.h)但是,如果出现在.pch中,它会破坏索引器,因为它不是严格正确的。

尝试删除.pch文件的内容,然后删除所有DerivedData并让Xcode重新编制索引。如果事情现在突出显示,你知道你的.pch是问题。

答案 1 :(得分:2)

使用Kevin Ballard的建议,我改变了我的.pch文件:

#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <opencv/cv.h>
#endif

为:

#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <opencv/cv.h>
#endif

在Finder中,我还通过转到username / Library / Developer / Xcode / DerivedData删除了相应的Derived Data文件夹。

Voilà - 语法现在已正确着色。我的疯狂终于消退了。

编辑(10天后):但我会补充说,这并不总是有效。我的代码意识再次被打破,执行这些步骤并没有解决它。似乎每个案例都是独一无二的,只要发生这种情况,您就不得不浪费时间来解决问题。希望Apple能够在未来使Xcode对这些错误更加强大。