在Xcode版本4.0中,我注意到方法中的#pragma标记不再显示在跳转栏中。唯一显示的#pragma标记是方法之间的标记。
我正在使用这些#pragma标记,以便快速组织和获取显示在我的tableviews的不同部分中的信息,我真的希望恢复该功能。
任何人都知道如何让它们再次出现?
答案 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
行之前和之后有一个空白行。-
之后只有一个空格。<强>更新强>
我意识到,如果项目在某处被破坏,有时上述规则是不够的。 (我尝试将一些来源移动到一个新项目,他们正确显示)。所以我所做的就是关闭我的项目,从组织者中删除它的派生数据,并删除这两个文件夹
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+),但最新版本可以使用。
答案 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)
要在跳转栏中显示实用标记,请尝试以下方法: