xcode4 - La marca#pragma no se muestra en los métodos en Xcode 4.0
(14)
En la versión 4.0 de Xcode, observo que las marcas #pragma dentro de los métodos ya no aparecen en la barra de salto. Las únicas marcas de # pragma que se muestran son aquellas que se encuentran entre métodos.
Estaba usando estas marcas #pragma para facilitar la organización rápida y obtener información que aparece en diferentes secciones de mis vistas de tabla y realmente me gustaría recuperar esa funcionalidad.
¿Alguien sabe cómo hacer que aparezcan de nuevo?
¿Funcionaron las marcas #pragma dentro de los métodos del código x anterior? Realmente me gustaría usarlos, pero como usted dijo, solo funciona entre métodos pero no dentro de un método, lo que sería realmente útil.
BUMP si alguien tiene alguna idea sobre cómo agregar código a una sección dentro de un método que lo agregue a la barra de salto XCode ...
Aparentemente hay algunos problemas en el analizador de pragma en Xcode. En mi caso, podría hacer que los #pragma
s reaparecieran unificando su sintaxis a la nueva.
En lugar de no tener trozos de código uniformes y desordenados con algunos pragmas:
// Code ...
#pragma mark -
#pragma mark UITextViewDelegate Protocol
// More code ...
# pragma mark - Important stuff
// Even more code ...
Cambié todo a
// Code ...
#pragma mark - UITextViewDelegate Protocol
// More code ...
# pragma mark - Important stuff
// Even more code ...
Básicamente, me aseguré ...
- hay una línea en blanco antes y después de la línea
#pragma
. - solo hay un espacio antes y otro después del
-
. - La línea pragma no termina con un espacio.
ACTUALIZAR
Me he dado cuenta de que a veces las reglas anteriores no son suficientes si el proyecto se rompe en alguna parte. (Intenté mover algunas fuentes a un nuevo proyecto y se mostraron correctamente). Entonces, lo que hice fue cerrar mi proyecto, eliminar los datos derivados del organizador y también eliminar estas dos carpetas
MyProject.xcodeproj/project.xcworkspace/
MyProject.xcodeproj/xcuserdata/
Así que la próxima vez que abra mi proyecto, Xcode los volverá a generar :)
Ahora todas mis fuentes están bien de nuevo :)
Me doy cuenta de que probablemente hay un porcentaje muy pequeño de usos para los cuales se aplica lo que estoy a punto de decir, pero por si acaso
Si usa Doxygen para generar documentación a partir de los comentarios de su código fuente, y tiende a comentar sus métodos en el archivo de implementación (es decir, .m), al agregar una sección vacía después de @implementation, Doxygen no analizará sus comentarios de Doxygen.
Me encontré con el mismo problema. Ahora inserto un método ficticio después de @implementation ...
y antes del primer método "real". ...-Prefic.pch
este método en el archivo ...-Prefic.pch
del proyecto para que no aparezca en la barra de salto.
Agregue lo siguiente a su ...- Prefijo.pch:
#define PLEASE_LET_PRAGMA_MARK_WORK - (void) pleaseLetPragmaMarkWork {}
E inserte la solicitud en sus omplementaciones:
@implementation anyClass
PLEASE_LET_PRAGMA_MARK_WORK
#pragma mark - This will show up.
Funciona de maravilla.
Para aclarar la respuesta correcta por RantriX ...
Si su primera #pragma mark
no aparece en el menú contextual de la barra de salto, agregue un par de llaves. (Xcode version 4)
Por ejemplo, cambia esto:
@implementation MainMenu
#pragma mark Lifecycle
a esto (note las llaves):
@implementation MainMenu
{
}
#pragma mark Lifecycle
Para las marcas dentro de los métodos (o en cualquier otro lugar), ahora puede usar la palabra clave TODO: como comentario.
Me gusta esto:
// TODO: some text
No estoy seguro de que la versión xcode esté disponible (probablemente 4.5+), pero está disponible en la última versión.
Para mostrar las marcas de pragma en la barra de salto intente esto:
- Simplemente elimine los espacios entre ''// MARK'' y '':''.
- Eso debería ser así ''// MARK:''.
Por lo que vale la pena, he presentado un informe de error (12895229) sobre esto dado que no pude encontrar uno que haya sido archivado.
Gracias por las ideas de trabajo Asignado a una macro permite una eliminación fácil en el futuro:
# define WORK_AROUND_PRAGMA {}
Tiendo a tener archivos de macros globales para cosas útiles como esta. Ya sabes, codificación / decodificación rápida, accesores (para los días anteriores a las propiedades) y similares.
Puede encontrar su respuesta en este hilo .
También estoy experimentando este problema. Una marca de pragma agregada antes del primer método no aparecerá. Por ejemplo, esto no funcionará:
@implementation RandomClass
#pragma mark - Getter Methods
- (void) firstMethod
{
}
@end
Aquí hay algunas soluciones rápidas y sucias para que aparezca la marca de pragma antes de que aparezca el primer método. Puede agregar un bloque vacío antes de él o simplemente puede colocar la marca de pragma dentro del propio bloque.
Usando un bloque vacío:
@implementation RandomClass
{}
#pragma mark - Getter Methods
- (void) firstMethod
{
}
@end
Añadiendo la marca pragma dentro del bloque vacío en sí:
@implementation RandomClass
{
#pragma mark - Getter Methods
}
- (void) firstMethod
{
}
@end
No parece muy bonito pero funciona. Espero que eso ayude.
Tuve este problema al utilizar una sintaxis que solía funcionar en xcode 3.x y ya no funciona para xcode 4.
Estaba usando sólo "pragma"
#pragma - My Pragma Text
Esto solía funcionar bien para xcode 3 pero, para xcode 4, se debe usar la sintaxis completa. Esto significa que #pragma siempre debe ir seguido de la palabra clave "marca".
#pragma mark - My Pragma Text
EDITAR
Xcode 6 (corregido en beta 4) utiliza la sintaxis // MARK:
para archivos swift
Y al parecer, no funcionarán antes de tu primer método. Esto, por ejemplo, no funcionará:
#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;
}
Si estoy equivocado, hágamelo saber, pero no creo que lo esté. Si esto funciona, espero que se arregle!
user1639164 - A riesgo de ser pedante, diría que está "95%" en lo correcto. Descubrí que es posible obtener Xcode para mostrar un pragma antes de tu primer método. Si la primera parte del código en un archivo fuente resulta ser un procedimiento regular en lugar de un método, entonces aparecerá el pragma. P.ej
NSString * localizedString (NSString * key)
{
// My code here…
}
# pragma mark - app-delegate startup
- (id) init
{
self = [super init];
if (self)… etc
Este es un extracto de mi código de delegado de aplicación repetitivo. En este caso, verá que el pragma aparece antes del primer método. ¡Pero no antes de tu primer trozo de código! :-) Así que es como si la maquinaria de análisis de Pragma no pudiera ponerse en marcha hasta que se viera al menos una rutina: un método u otro. Como dices, espero que se arregle pronto.
@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