Подтвердить что ты не робот

#pragma mark не отображается в методах в Xcode 4.0

В Xcode версии 4.0 я заметил, что метки #pragma внутри методов больше не отображаются в панели перехода. Единственными признаками #pragma, которые появляются, являются те, которые находятся между методами.

Я использовал эти метки #pragma, чтобы было легко быстро организовать и получить информацию, которая появляется в разных разделах моих табличных представлений, и я действительно хотел бы вернуть эту функциональность.

Кто-нибудь знает, как заставить их появляться снова?

4b9b3361

Ответ 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

Ответ 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