Метка #pragma не отображается в методах в Xcode 4.0 - PullRequest
21 голосов
/ 15 марта 2011

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

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

Всемзнаете, как заставить их появиться снова?

Ответы [ 14 ]

19 голосов
/ 19 ноября 2012

Я тоже испытываю эту проблему.Прагма, добавленная до первого метода, не будет отображаться.Например, это не сработает:

@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

Это выглядит не слишком красиво, но работает.Я надеюсь, что это помогает.

8 голосов
/ 24 апреля 2011

У меня была эта проблема при использовании синтаксиса, который работал для xcode 3.x и больше не работает для xcode 4.

Я использовал просто "pragma"

#pragma - My Pragma Text

Это нормально работало для xcode 3, но для xcode 4 должен использоваться полный синтаксис.Это означает, что за #pragma всегда должно следовать ключевое слово «mark».

#pragma mark - My Pragma Text

EDIT

Xcode 6 (исправлено в бета 4) использует синтаксис // MARK: для swift файлы

2 голосов
/ 11 июня 2013
@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
2 голосов
/ 06 июня 2013

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

Если вы используете Doxygen для генерации документации из комментариев исходного кодаи вы, как правило, комментируете свои методы в файле реализации (например, .m), затем добавление пустого раздела после @implementation приведет к тому, что Doxygen не сможет проанализировать ваши комментарии Doxygen.

2 голосов
/ 02 февраля 2013

Я столкнулся с той же проблемой. Теперь я вставляю фиктивный метод после @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.

Работает как шарм.

2 голосов
/ 18 декабря 2012

Для чего бы это ни стоило, я подал отчет об ошибке (12895229) по этому вопросу, так как я не смог найти тот, который был подан.

Спасибо за идеи обходного пути.Назначение макроса позволяет легко удалить его в будущем:

# define WORK_AROUND_PRAGMA {}

Я склонен иметь глобальные файлы макросов для таких полезных вещей, как этот.Вы знаете, быстрое кодирование / декодирование, средства доступа (за несколько дней до свойств) и тому подобное.

2 голосов
/ 15 ноября 2012

Для отметок в методах (или где-либо еще) теперь вы можете использовать ключевое слово TODO: в качестве комментария.

как это:

// TODO: some text

Я не уверен насчет версии xcode, которая стала доступной (вероятно, 4.5+), но она доступна в последней.

enter image description here

2 голосов
/ 24 октября 2012

И, видимо, они не будут работать до вашего первого метода.Это, например, не будет работать:

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

Если я ошибаюсь, дайте мне знать, но я так не думаю.Если это должно сработать, я надеюсь, что это исправлено !!

2 голосов
/ 15 августа 2012

Видимо, есть некоторые проблемы в анализаторе прагмы в 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 сгенерирует их заново:)

Теперь ВСЕ мои источники снова в порядке:)

2 голосов
/ 15 мая 2011

Работали ли метки #pragma внутри методов в предыдущем xcode?Я действительно хотел бы использовать их, но, как вы сказали, он работает только между методами, но не внутри метода, что было бы очень полезно.

BUMP, если у кого-то есть идеи по поводу способов добавления кода враздел в методе, который добавил бы его к панели переходов XCode ...

...