#pragma mark没有显示在Xcode 4.0中的方法中

时间:2011-03-15 14:49:35

标签: xcode4 pragma

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

我正在使用这些#pragma标记,以便快速组织和获取显示在我的tableviews的不同部分中的信息,我真的希望恢复该功能。

任何人都知道如何让它们再次出现?

14 个答案:

答案 0 :(得分:19)

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

@implementation RandomClass

#pragma mark - Getter Methods

- (void) firstMethod
{
}

@end

以下是在第一个方法出现之前制作pragma标记的一些快速解决方法。你可以在它之前添加一个空块,或者你可以将pragma标记放在块本身内。

使用空块:

@implementation RandomClass
{}
#pragma mark - Getter Methods

- (void) firstMethod
{
}

@end

在空块本身内添加pragma标记:

@implementation RandomClass
{
#pragma mark - Getter Methods
}

- (void) firstMethod
{
}

@end

它看起来不太漂亮但它有效。我希望有所帮助。

答案 1 :(得分:8)

我在使用过去在xcode 3.x上工作的语法时遇到了这个问题,而且不再适用于xcode 4。

我正在使用" pragma"

#pragma - My Pragma Text

过去常常适用于xcode 3,但是对于xcode 4,必须使用完整的语法。这意味着#pragma必须始终跟随"标记"关键字。

#pragma mark - My Pragma Text

修改

Xcode 6(在测试版4中已修复)对// MARK:个文件使用swift语法

答案 2 :(得分:2)

#pragma标记是否在上一个xcode中的方法内部工作? 我真的很想使用它们,但是就像你说的那样,它只适用于方法之间,但不适用于方法,这非常有用。

BUMP如果有人对如何将方法添加到方法中的部分有任何想法,将其添加到XCode跳转栏...

答案 3 :(得分:2)

显然,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行以空格结尾。

<强>更新

我意识到,如果项目在某处被破坏,有时上述规则是不够的。 (我尝试将一些来源移动到一个新项目,他们正确显示)。所以我所做的就是关闭我的项目,从组织者中删除它的派生数据,并删除这两个文件夹

MyProject.xcodeproj/project.xcworkspace/
MyProject.xcodeproj/xcuserdata/

所以下次打开我的项目时,Xcode会重新生成它们:)

现在我的所有来源都可以了:)

答案 4 :(得分:2)

显然,他们在你的第一种方法之前不会工作。例如,这不起作用:

#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;
}

如果我错了,请告诉我,但我不认为我。如果这应该工作,我希望它得到修复!!

答案 5 :(得分:2)

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

像这样:

// TODO: some text

我不确定xcode版本是否可用(可能是4.5+),但最新版本可以使用。

enter image description here

答案 6 :(得分:2)

对于它的价值,我已经提交了一份错误报告(12895229),因为我找不到一份报告。

感谢您的解决方案。分配给宏可以在将来轻松删除:

#define WORK_AROUND_PRAGMA {}

我倾向于使用全局宏文件来获取有用的东西。您知道,快速编码/解码,访问器(属性之前的日子)等。

答案 7 :(得分:2)

我遇到了同样的问题。我现在在@implementation ...之后和第一个'真正'方法之前插入一个虚方法。我在项目的...-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.

像魅力一样。

答案 8 :(得分:2)

我发现可能只有很小比例的使用对我说的是适用的,但以防万一......

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

答案 9 :(得分:2)

@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

答案 10 :(得分:1)

您可以找到答案on this thread

答案 11 :(得分:1)

user1639164 - 冒着迂腐的风险,我会说你“95%”是正确的。我发现有可能让Xcode在你的第一个方法之前显示一个pragma 。如果源文件中的第一个代码块恰好是常规过程而不是方法,那么您将看到pragma出现。 E.g。

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

# pragma mark - app-delegate startup

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

这是我的样板应用委托代码的摘录。在这种情况下,您在第一个方法之前看到pragma显示。但不是在你的第一块代码之前! :-)所以就好像pragma解析机器在看到至少一个例程 - 方法或其他方法之前无法使用它的屁股。如你所说,希望很快就能解决。

答案 12 :(得分:1)

通过RantriX澄清正确答案......

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

例如,改变这个:

@implementation MainMenu

#pragma mark Lifecycle

到此(注意大括号):

@implementation MainMenu
{

}

#pragma mark Lifecycle

答案 13 :(得分:0)

要在跳转栏中显示实用标记,请尝试以下方法:

  1. 只需删除'// MARK'和':'之间的空格。
  2. 那应该像这样'// MARK:'。