Xcode4 #在Xcode 4.0的方法中未显示pragma标记

Xcode4 #在Xcode 4.0的方法中未显示pragma标记,xcode4,pragma,Xcode4,Pragma,在Xcode版本4.0中,我注意到方法中的#pragma标记不再显示在跳转栏中。唯一出现的pragma标记是那些在方法之间的标记 我使用了这些#pragma标记,以便于快速组织和获取在我的TableView的不同部分中显示的信息,我真的很想恢复这些功能 有人知道如何让它们再次出现吗?我在使用用于xcode 3.x的语法时遇到了这个问题,而这种语法在xcode 4上已经不适用了 我只是用了“pragma” 这对于xcode 3来说很好,但是对于xcode 4,必须使用完整的语法。这意味着#prag

在Xcode版本4.0中,我注意到方法中的#pragma标记不再显示在跳转栏中。唯一出现的pragma标记是那些在方法之间的标记

我使用了这些#pragma标记,以便于快速组织和获取在我的TableView的不同部分中显示的信息,我真的很想恢复这些功能


有人知道如何让它们再次出现吗?

我在使用用于xcode 3.x的语法时遇到了这个问题,而这种语法在xcode 4上已经不适用了

我只是用了“pragma”

这对于xcode 3来说很好,但是对于xcode 4,必须使用完整的语法。这意味着#pragma后面必须始终跟有“mark”关键字


编辑

Xcode 6(在beta 4中修复)使用
//标记:
语法来表示
swift
文件

在以前的Xcode中,pragma标记是否在方法内部工作? 我真的很想使用它们,但就像你说的,它只在方法之间工作,而不在方法内工作,这将非常有用


BUMP如果有人对如何在一个方法中将代码添加到一个节,从而将其添加到XCode跳转栏中有任何想法…

显然,XCode中的pragma解析器存在一些问题。在我的例子中,我可以通过将
#pragma
的语法统一到新的语法来重新显示它们

与其没有统一的、混乱的代码块,还不如使用一些杂注:

// Code ...
#pragma mark -
#pragma mark UITextViewDelegate Protocol

// More code ...
# pragma mark - Important stuff
// Even more code ...
我将所有内容更改为:

// Code ...

#pragma mark - UITextViewDelegate Protocol

// More code ...

# pragma mark - Important stuff

// Even more code ...
基本上,我确定

  • #pragma
    行前后有一个空行
  • -
    之前和之后只有一个空格
  • pragma行不以空格结尾
更新

我意识到,如果项目在某个地方被破坏,有时上述规则是不够的。(我试着将一些资源转移到一个新项目中,结果显示正确)。所以我所做的就是关闭我的项目,从organizer中删除它的派生数据,并删除这两个文件夹

MyProject.xcodeproj/project.xcworkspace/
MyProject.xcodeproj/xcuserdata/
所以下次我打开我的项目时,Xcode将重新生成它们:)


现在,我所有的源代码都正常了:)

显然,在使用第一种方法之前,它们不会工作。例如,这将不起作用:

#import "Person.h"

@implementation Person

#pragma mark - Convenience

// ===========================================================
//           Class/Convenience Methods
// ===========================================================

+ (Person *)personWithName:(NSString *)name hourlyRate:(double)rate
{
    Person *person = [[[Person alloc] initWithName:name rate:rate] autorelease];
    return person;
}

如果我错了,让我知道,但我不认为我错了。如果这应该工作,我希望它得到修复

user1639164-冒着学究气的风险,我认为你是“95%”对的。我发现可以让Xcode在第一个方法之前显示pragma。如果源文件中的第一段代码恰好是一个常规过程而不是一个方法,那么您将看到pragma。例如

NSString * localizedString (NSString * key)
{
// My code here…
}

# pragma mark - app-delegate startup

- (id) init
{
  self = [super init];
  if (self)… etc

这是我的样板应用程序委托代码的摘录。在本例中,您将看到pragma显示在第一个方法之前。但不是在第一段代码之前!:-)因此,这就好像布拉格语法分析机器在至少看到一种常规方法或其他方法之前无法启动。正如您所说,希望它能尽快修复。

对于方法(或其他任何地方)中的标记,您现在可以使用关键字TODO:作为注释

像这样:

// TODO: some text
我不确定这个xcode版本是否可用(可能是4.5+),但它在最新版本中可用


我也遇到了这个问题。在第一个方法之前添加的杂注标记将不会显示。例如,这将不起作用:

@implementation RandomClass

#pragma mark - Getter Methods

- (void) firstMethod
{
}

@end
在第一个方法出现之前,这里有一些快速的解决方法来标记pragma。可以在块之前添加空块,也可以将pragma标记放在块本身内部

使用空块:

@implementation RandomClass
{}
#pragma mark - Getter Methods

- (void) firstMethod
{
}

@end
@implementation RandomClass
{
#pragma mark - Getter Methods
}

- (void) firstMethod
{
}

@end
在空块内部添加pragma标记:

@implementation RandomClass
{}
#pragma mark - Getter Methods

- (void) firstMethod
{
}

@end
@implementation RandomClass
{
#pragma mark - Getter Methods
}

- (void) firstMethod
{
}

@end

它看起来不太漂亮,但很管用。我希望这能有所帮助。

无论如何,我已经就此提交了一份bug报告(12895229),因为我找不到一份已经提交的bug报告

感谢您围绕这些想法所做的工作。分配给宏可以在将来轻松删除:

#围绕{u PRAGMA{}定义工作


我倾向于使用全局宏文件来实现类似这样的有用功能。你知道,快速编码/解码,访问器(在属性之前的几天)等等。我遇到了同样的问题。我现在在
@implementation…
之后和第一个“real”方法之前插入一个伪方法。我在项目的
…-Prefic.pch
文件中定义了此方法,因此它不会显示在跳转栏中

将以下内容添加到…-Prefix.pch中:

#define PLEASE_LET_PRAGMA_MARK_WORK - (void) pleaseLetPragmaMarkWork {}
并在您的答卷中插入请求:

@implementation anyClass

PLEASE_LET_PRAGMA_MARK_WORK

#pragma mark - This will show up.

工作起来很有魅力。

要澄清RantriX的正确答案

如果您的第一个
#pragma标记
未能出现在跳转栏的关联菜单中,请添加一对大括号。(Xcode版本4)

例如,更改此选项:

对此(请注意大括号):


我意识到可能有一小部分的用法适用于我将要说的,但以防万一


如果您使用Doxygen从源代码注释生成文档,并且您倾向于在实现文件(即.m)中注释您的方法,那么在@implementation之后添加一个空部分将导致Doxygen无法解析您的Doxygen注释。

要在跳转栏中显示pragma标记,请尝试以下操作:

@implementation ViewController

- (void)pragmaStartHack {} // Since pragma only works when after at least one method

#pragma mark This pragma will render in Xcode

// Your code here...

@end
  • 只需删除“//MARK”和“:”之间的空格即可
  • 应该是这样的“//标记:”

  • 请在“是”处提交错误报告,它们确实在XCode 3中的方法内部工作,这非常有用。当我将pragma标记放在第一个方法之后再次工作时,我打破了你的3条规则,它继续工作。使用这个小宏的好主意!谢谢在Xcode 4中,添加一对大括号以启用第一个pragma标记。看看我和兰特里克斯的答案。
    @implementation MainMenu
    {
    
    }
    
    #pragma mark Lifecycle
    
    @implementation ViewController
    
    - (void)pragmaStartHack {} // Since pragma only works when after at least one method
    
    #pragma mark This pragma will render in Xcode
    
    // Your code here...
    
    @end