#pragma mark не отображается в методах в Xcode 4.0
В Xcode версии 4.0 я заметил, что метки #pragma внутри методов больше не отображаются в панели перехода. Единственными признаками #pragma, которые появляются, являются те, которые находятся между методами.
Я использовал эти метки #pragma, чтобы было легко быстро организовать и получить информацию, которая появляется в разных разделах моих табличных представлений, и я действительно хотел бы вернуть эту функциональность.
Кто-нибудь знает, как заставить их появляться снова?
Ответы
Ответ 1
Я тоже испытываю эту проблему. Добавлен знак прагмы до того, как первый метод не появится. Например, это не сработает:
@implementation RandomClass
#pragma mark - Getter Methods
- (void) firstMethod
{
}
@end
Вот некоторые быстроходные обходные пути, чтобы сделать прагма-метку до появления первого метода. Перед этим вы можете добавить пустой блок или просто поместить прагма-метку внутри самого блока.
Использование пустого блока:
@implementation RandomClass
{}
#pragma mark - Getter Methods
- (void) firstMethod
{
}
@end
Добавление метки прагмы внутри самого пустого блока:
@implementation RandomClass
{
#pragma mark - Getter Methods
}
- (void) firstMethod
{
}
@end
Это не выглядит слишком красивым, но он работает. Надеюсь, что это поможет.
Ответ 2
У меня была эта проблема при использовании синтаксиса, который использовался для работы с xcode 3.x и больше не работает для xcode 4.
Я использовал только "прагму"
#pragma - My Pragma Text
Это хорошо работает для xcode 3, но для xcode 4 нужно использовать полный синтаксис. Это означает, что за #pragma всегда следует ключевое слово "mark".
#pragma mark - My Pragma Text
ИЗМЕНИТЬ
Xcode 6 (исправлено в бета-версии 4) использует синтаксис // MARK:
для swift
файлов
Ответ 3
Знаки #pragma работают внутри методов в предыдущем xcode?
Я действительно хотел бы использовать их, но, как вы сказали, он работает только между методами, но не внутри метода, что было бы действительно полезно.
BUMP, если у кого-нибудь есть идеи о способах добавления кода в раздел в методе, который добавит его в панель перехода XCode...
Ответ 4
По-видимому, в пакете pragma в Xcode есть некоторые проблемы. В моем случае я мог бы сделать #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
.
- существует только одно пространство до и после
-
.
- строка прагмы не заканчивается пробелом.
UPDATE
Я понял, что иногда выше правил недостаточно, если проект где-то сломан. (Я попытался переместить некоторые источники в новый проект, и они показали правильно). Итак, что я сделал, это закрыть мой проект, удалить его производные данные из организатора, а также удалить эти две папки
MyProject.xcodeproj/project.xcworkspace/
MyProject.xcodeproj/xcuserdata/
Итак, в следующий раз, когда я открою свой проект, Xcode будет их повторно генерировать:)
Теперь все мои источники снова в порядке:)
Ответ 5
И, судя по всему, они не будут работать до вашего первого метода. Это, например, не будет работать:
#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;
}
Если я ошибаюсь, дайте мне знать, но я не думаю, что это так. Если это сработает, я надеюсь, что он будет исправлен.
Ответ 6
Для меток в методах (или в другом месте) теперь вы можете использовать ключевое слово TODO: как комментарий.
вот так:
// TODO: some text
Я не уверен, что версия xcode стала доступной (вероятно, 4.5+), но она доступна в последней версии.
![enter image description here]()
Ответ 7
Для чего это стоит, я подал сообщение об ошибке (12895229) по этому поводу, я не смог найти тот, который был подан.
Спасибо за обходные идеи. Назначение макроса позволяет легко удалить в будущем:
#define WORK_AROUND_PRAGMA {}
Я имею тенденцию иметь глобальные файлы макросов для таких полезных вещей. Вы знаете, быстрое кодирование/декодирование, аксессоры (за дни до свойств) и т.п.
Ответ 8
Я столкнулся с той же проблемой. Теперь я вставляю фиктивный метод после @implementation ...
и перед первым "реальным" методом. Я определяю этот метод в файле проекта ...-Prefic.pch
, чтобы он не отображался в панели перехода.
Добавьте в свой... - Prefix.pch:
#define PLEASE_LET_PRAGMA_MARK_WORK - (void) pleaseLetPragmaMarkWork {}
И вставьте запрос в свои omplementations:
@implementation anyClass
PLEASE_LET_PRAGMA_MARK_WORK
#pragma mark - This will show up.
Работает как шарм.
Ответ 9
Я понимаю, что, вероятно, очень небольшой процент использования, для которого то, что я собираюсь сказать, применяется, но на всякий случай...
Если вы используете Doxygen для создания документации из комментариев исходного кода, и вы склонны комментировать свои методы в файле реализации (т.е..m), то добавление пустой секции после @implementation приведет к тому, что Doxygen не сможет проанализировать ваш Doxygen комментарии.
Ответ 10
@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
Ответ 11
Вы можете найти свой ответ в этом потоке.
Ответ 12
user1639164 - Из-за риска быть педантичным, я бы сказал, что вы "95%" правильны. Я обнаружил, что можно получить Xcode для отображения прагмы до вашего первого метода. Если первый фрагмент кода в исходном файле является обычной процедурой, а не методом, вы получите прагму. Например.
NSString * localizedString (NSString * key)
{
// My code here…
}
# pragma mark - app-delegate startup
- (id) init
{
self = [super init];
if (self)… etc
Это выдержка из моего кода делегата приложения. В этом случае вы будете видеть прагма-шоу до первого метода. Но не раньше вашего первого куска кода!:-) Итак, как будто прагматический синтаксический механизм не может получить свою задницу в снаряжении, пока не увидит хотя бы один рутинный метод или иначе. Как вы говорите, надеюсь, что скоро это будет исправлено.
Ответ 13
Чтобы уточнить правильный ответ RantriX...
Если ваш первый #pragma mark
не отображается в контекстном меню панели перехода, добавьте пару фигурных скобок. (Версия Xcode 4)
Например, измените это:
@implementation MainMenu
#pragma mark Lifecycle
к этому (обратите внимание на фигурные скобки):
@implementation MainMenu
{
}
#pragma mark Lifecycle