'Mobile' Categoría
Icono de la aplicación
57 × 57 píxeles icono que representará a nuestra aplicación es "deteriorados" por el iPhone de Apple de forma automática: se agrega un borde redondeado, un brillante y efectos 3D. Este ajuste se puede cambiar seleccionando el archivo [nome applicazione]-Info.plist y la adición de la propiedad "Icon incluye efectos de brillo y bisel Ya":
Continuación ...
Xcode es un entorno de desarrollo muy potente y se reserva algunas sorpresas. Que permite una función similar a "fragmentos" del famoso editor TextMate . En la práctica, es posible insertar bloques de código con la secuencia de ESC + una combinación de una o más secuencias de caracteres. e otterrete: Por ejemplo, si desea insertar un bloque if intente presionar ESC+if y obtendrás:

. Como se muestra en la figura, aparece un menú (el mismo auto-realización), donde se puede elegir entre un simple bloque if o if/else . Al hacer clic en "enviar" que se obtiene:

Aquí hay dos enlaces para la lista completa de atajos de teclado:
Continuación ...
Normalmente, un evento que no es más que un mensaje es fijo (establecido y aplicado) en la misma clase o contexto, la función o el procedimiento de "llamador". o in un UIViewController . Por ejemplo, si se añade un botón UIButton a través del código (programación), se encuentra nuestra clase en un UIView o UIViewController . En ambos casos, la asignación de tareas y la inicialización del botón será seguido por el establecimiento de target que debe recibir un mensaje cuando se hace "click" el botón, escriba:
1 2 3 4 5 6 7 8 9
| [ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton * = botón [UIButton buttonWithType: UIButtonTypeRoundedRect]; 10 , 180 , 300 , 30 ) ; bottone.frame CGRectMake = (10, 180, 300, 30); @ "Press me" forState : UIControlStateNormal ] ; [Botón setTitle: @ "me Prensa" Forst: UIControlStateNormal]; / / Decidir quién debe recibir el mensaje de UIControlEventTouchUpInside self action : @selector ( onButtonClicked ) forControlEvents : UIControlEventTouchUpInside ] ; El botón [AddTarget: acción de auto: @ selector (onButtonClicked) forControlEvents: UIControlEventTouchUpInside]; / / ... void ) onButtonClicked { - (Void) {onButtonClicked / / ... } |
Línea 5 decide que la palabra clave (el objeto) y lo (método) "llamada" cuando nuestros se pulsa el botón. En el ejemplo anterior también se sabe que el ajuste de la presión de que el mensaje se envía al método onButtonClick implementado a continuación, que entonces formaba parte del mismo contexto (o clase). potremmo inviare il nostro messaggio ad un qualsiasi altro oggetto, posto quindi al difuori del contesto in uso. La primera consideración es evidente que podemos hacer, entonces, es que mediante la alteración de los parámetros de self y action que podemos enviar nuestro mensaje a cualquier otro objeto, se colocará en la difuori contexto de uso. : He aquí un ejemplo: una clase UIApplicationDelegate crear un UIViewController :
1 2 3 4 5
| / / / / MyAppDelegate.m / / SplashScreenController alloc ] ; splashScreenController = [SplashScreenController alloc]; splashScreenController.view ] ; [Ventana addSubview: splashScreenController.view]; |
associata al UIViewController stesso: El SplashScreenController expone un método que permite animar el UIView asociados con UIViewController mismo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| / / / / SplashScreenController.m / / void ) animateBackgroundDown { - (Void) {animateBackgroundDown nil context : nil ] ; [BeginAnimations UIView: contexto cero: nil]; 0.75 ] ; [UIView setAnimationDuration: 0,75]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; self ] ; [SetAnimationDelegate UIView: auto]; @selector ( onAnimationFinished ) ] ; [UIView setAnimationDidStopSelector: @ selector (onAnimationFinished)]; CGRect ) { 0 , 480 , 320 , 480 } ; self.view.frame = (CGRect) {0, 480, 320, 480}; ; [CommitAnimations UIView]; } / / ... void ) onAnimationFinished { - (Void) {onAnimationFinished "Animazione terminata" ) ; NSLog (@ "La animación ha terminado"); } |
. El código anterior muestra un método definido dentro de la clase SplashScreenController tipo UIViewController . ) onAnimationFinished definito più sotto, facente parte sempre della classe SplashScreenController . No hace más que animar el UIView animación abajo, y cuando la animación se ha completado, llame al (enviar un mensaje a sí mismo - de ahí self ) onAnimationFinished se define a continuación, es parte de la clase siempre SplashScreenController . , non saremo informati della fine dell'animazione: De ello se desprende que en nuestro myAppDelegate , al invocar el método animateBackgroundDown , no vamos a ser informado de la final de la animación:
1 2 3 4
| / / / / MyAppDelegate.m / / ; [SplashScreenController animateBackgroundDown]; |
Lo que puede ser que desee, en cambio, es la creación de una nueva versión de animateBackgroundDown que me dicen a dónde enviar el mensaje al final de la animación, y el método de llamada. En la práctica, quiere asegurarse de que escribir en nuestra clase myAppDelegate :
1 2 3 4 5 6 7 8
| / / / / MyAppDelegate.m / / self selector : @selector ( onAnimationFinished ) ] ; [SplashScreenController animateBackgroundDown: auto selector: @ selector (onAnimationFinished)]; / / ... void ) onAnimationFinished { - (Void) {onAnimationFinished "Animazione terminata" ) ; NSLog (@ "La animación ha terminado"); } |
, bensì in myAppDelegate . Esta vez el método onAnimationFinished no está en la UIViewController , pero en myAppDelegate . nel modo seguente: Para ello basta con cambiar el método de animateBackgroundDown en UIViewController de la siguiente manera:
1 2 3 4 5 6 7 8 9 10 11 12
| / / / / SplashScreenController.m / / void ) animateBackgroundDown : ( id ) target selector : ( SEL ) selector { - (Void) animateBackgroundDown: (id) objetivo de selección: (SEL) selector { nil context : nil ] ; [BeginAnimations UIView: contexto cero: nil]; 0.75 ] ; [UIView setAnimationDuration: 0,75]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; target ] ; [SetAnimationDelegate UIView: blanco]; selector ] ; [UIView setAnimationDidStopSelector: selector]; CGRect ) { 0 , 480 , 320 , 480 } ; self.view.frame = (CGRect) {0, 480, 320, 480}; ; [CommitAnimations UIView]; } |
). Ahora tenemos un método que toma el "contexto" ( target ) y el método de llamada ( selector ). a qualsiasi altro “oggetto” / classe in grado di riceverlo. Ahora, cuando termina la animación, el mensaje AnimationDidStop será enviado a myAppDelegate cualquier otro "objeto" / clase que pueda recibir.
Continuación ...
CGRectMake() es una función (en realidad una línea # define) que se utiliza mucho, especialmente cuando se crea objetos gráficos de código o interfaz de usuario. o UIImageView . CGRectMake() restituisce una struct (struttura di tipo) CGRect : Su uso se asocia a menudo por lo tanto, los componentes de la inicialización de UIKit , sino también a simples UIView o UIImageView . CGRectMake() devuelve una struct (tipo de estructura) CGRect :
1 2 3 4 5
| struct {CGRect CGPoint origen; CGSize tamaño; }; typedef struct CGRect CGRect; |
: Que a su vez se compone de dos diferentes struct CGPoint y CGSize :
1 2 3 4 5 6 7 8 9 10 11 12 13
| struct {CGPoint CGFloat x; CGFloat y; }; typedef struct CGPoint CGPoint;
Tamaños / *. * /
struct {CGSize Ancho CGFloat; CGFloat altura; }; typedef struct CGSize CGSize; |
. Que, a su vez, otra vez, contienen tipos CGFloat o el tipo float . Si analizamos el código de CGRectMake () son los siguientes:
1 2 3 4 5 6 7 8
| CG_INLINE CGRect CGRectMake (CGFloat x, y CGFloat, ancho CGFloat, CGFloat altura) { CGRect rect; y; rect.origin.x = x, y = rect.origin.y; height; rect.size.width = anchura, altura = rect.size.height; volver rect; } |
De ello se desprende, por tanto, que este pedazo de código:
1 2 3 4
| [ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton gbutton * = [UIButton buttonWithType: UIButtonTypeRoundedRect]; 12 , 409 , 100 , 40 ) ; gbutton.frame CGRectMake = (12, 409, 100, 40); @ "Press" forState : UIControlStateNormal ] ; [Gbutton setTitle: @ "Prensa" Forst: UIControlStateNormal]; gbutton ] ; [MainWindow addSubview: gbutton]; |
Con razón se puede escribir como:
1 2 3 4
| [ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton gbutton * = [UIButton buttonWithType: UIButtonTypeRoundedRect]; CGRect ) { 12 , 409 , 100 , 40 } ; gbutton.frame = (CGRect) {12, 409, 100, 40}; @ "Press" forState : UIControlStateNormal ] ; [Gbutton setTitle: @ "Prensa" Forst: UIControlStateNormal]; gbutton ] ; [MainWindow addSubview: gbutton]; |
Sólo para acelerar las cosas "se ejecuta el código ... 
Continuación ...
Xcode es un entorno de desarrollo muy bueno, bonito y lleno de detalles que hacen que escribir código eficiente y agradable. Entre ellas se encuentra la facilidad de auto-completar al escribir, especialmente cuando la creación de aplicaciones para el iPhone de Apple, donde los marcos son muchos y recordar la sintaxis de la empresa y la nomenclatura de unos pocos.
Continuación ...
Utilizando las preferencias de Xcode se puede establecer el comportamiento de la atmósfera durante la fase de depuración de una aplicación para iPhone. La configuración por defecto, de hecho, son muy incómodos cuando se intenta y vuelve a intentarlo una aplicación, por ejemplo, después del lanzamiento de nuestra aplicación, debe abrir manualmente la ventana de la consola para ver la salida de varios NSLog() . Xcode también permite a las sesiones anteriores con el fin de obligarnos a limpiar la ventana con la mano. Afortunadamente, usted puede resolver el problema, actuando sobre las preferencias:

Como puede observarse, sólo tiene que seleccionar un elemento en el menú de inicio para decidir qué ventana de depuración que se abra automáticamente en el inicio de nuestra válida si (I & conjunto depurador de consola, pero puede elegir los trajes mejor que usted). A la derecha, entonces nos encontramos con la consola de Auto Debug claro, por lo que siempre comienzan con una consola limpia.
Continuación ...
creato. Quiero mostrar cómo se puede, con facilidad y rapidez extender una clase UIView de una manera que responde a un nuevo método de inicialización contiene códigos adicionales para personalizar el objeto UIView creado. Como algunos de ustedes probablemente saben, Objective-C no es compatible con un solo fabricante como en las lenguas objeto de otros orientados (como Adobe ActionScript y PHP 5). Es posible, de hecho, crear una instancia de una clase invocando manualmente de diferentes fabricantes (casi infinito). . Normalmente se utilizan para crear objetos UIView con el clásico initWithFrame . Pero imagine que desea crear una nueva clase de objetos visuales, desde un UIView , con algunas adiciones, como una etiqueta incorporada. . Básicamente lo que queremos es que nuestro objeto de crear una instancia que genera, así como la UIView , un objeto de tipo UILabel . Por ejemplo podríamos querer llegar al final:
1
| [ [ ViewLabel alloc ] initWithLabelDefine : CGRectMake ( 0 , 0 , 320 , 80 ) label : @ "Ciao" ] ; ViewLabel vl = * [[ViewLabel alloc] initWithLabelDefine: CGRectMake (0, 0, 320, 80) etiquetas: @ "Hola"]; |
: Para ello basta con crear una nueva clase de tipo UIView y llamar ViewLabel :
1 2 3 4 5 6 7 8 9 10 11 12 13
| / / / / ViewLabel.h / / # Importar <UIKit/UIKit.h> UIView { @ Interface ViewLabel: UIView { * UILabel internalLabel; } id ) initWithLabelDefine : ( CGRect ) frame label : ( NSString * ) labelDefine; - (Id) initWithLabelDefine: (CGRect) etiqueta de fotograma: ( NSString *) labelDefine; @ End |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| / / / / ViewLabel.m / / # Import "ViewLabel.h" @ Implementación ViewLabel id ) initWithFrame : ( CGRect ) frame { - (Id) initWithFrame: (CGRect) frame { self = [ super initWithFrame : frame ] ) { if (self = [super initWithFrame: marco]) { / / Código de inicialización } cambio sí; } / / / / El inicializador de nuevo / / id ) initWithLabelDefine : ( CGRect ) frame label : ( NSString * ) labelDefine { - (Id) initWithLabelDefine: (CGRect) etiqueta de fotograma: ( NSString *) {labelDefine self = [ super initWithFrame : frame ] ) { if (self = [super initWithFrame: marco]) { / / Aquí se puede decidir qué hacer, yo por / / Tengo el mismo marco de seguridad en el pasado / / Entrada, pero se restablece el X e Y ; frame.origin.x = 0; ; frame.origin.y = 0; UILabel alloc ] initWithFrame : frame ] ; internalLabel = [[UILabel alloc] initWithFrame: marco]; internalLabel.text = labelDefine; internalLabel ] ; [Self addSubview: internalLabel]; ; [InternalLabel liberación]; } cambio sí; } void ) drawRect : ( CGRect ) rect { - (Void) drawRect: (CGRect) rect { / / Dibujo de código } void ) dealloc { - (Void) {dealloc ; [Super dealloc]; } @ End |
En el momento de la creación de la nueva clase, que podríamos utilizar:
1
| [ [ ViewLabel alloc ] initWithLabelDefine : CGRectMake ( 0 , 0 , 320 , 80 ) label : @ "Ciao" ] ; ViewLabel vl = * [[ViewLabel alloc] initWithLabelDefine: CGRectMake (0, 0, 320, 80) etiquetas: @ "Hola"]; |
Continuación ...
Como se ha mencionado iPhone FirstApp: Adivinar el número - Parte 1 podemos ver cómo hacer una aplicación para el iPhone de Apple sin necesidad de utilizar Interface Builder! De hecho, vamos a eliminar los archivos físicos creados por Interface Builder, Xcode asistente. Al final de este post, entonces, tenemos una aplicación idéntica en todos los aspectos, a la conseguida en la primera parte, con la diferencia que vamos a lograr todos nuestros componentes visuales, incluyendo la ventana principal, por completo con el código.
La aplicación ya está hecho, si lo que desea es descargar, está disponible en mi repositorio de Google Code:
Me gustaría señalar de inmediato que el ZIP de este ejemplo que pesan menos que la última vez! 
Creamos el proyecto
Comenzamos por crear nuestro proyecto SecondApp (para distinguirla de FirstApp), aunque esta vez elija Ventana de aplicaciones basado en:

Ahora vamos a borrar todo lo relacionado con Interface Builder. : eliminatelo anche dal file system, quindi selezionate Also Move to Trash . Elimine el archivo MainWindow.xib , que se encuentra en la carpeta de Resources : también se elimina del sistema de archivos, a continuación, seleccione también se mueven a la papelera. nella casella Main nib file base name : A continuación, seleccione el archivo SecondoApp-info.plist y eliminar la referencia a la MainWindow punta de caja principal nombre base del archivo:

En este punto, ya no tienen Windows, por lo menos a través de Interface Builder. , e modifichiamo la funzione main() in questo modo: Por lo tanto, abrir el archivo main.m , situado en Other Sources , y modificar la función main() así:
1 2 3 4 5 6 7 8 9 10 11
| int argc, char * argv [ ] ) { int main (int argc, char * argv []) { pool = [ [ NSAutoreleasePool alloc ] init ] ; NSAutoreleasePool * Piscina = [[ NSAutoreleasePool alloc] init]; / / Al eliminar el archivo. XIB hemos perdido el punto / / Delegado a la Asamblea Parlamentaria Paritaria, a continuación, pasar a la "mano" UIApplicationMain ( argc, argv, nil , @ "SecondAppAppDelegate" ) ; int retval = UIApplicationMain (argc, argv, nil, @ "SecondAppAppDelegate"); ; [Comunicado de piscina]; volver retval; } |
Abrir SecondAppAppDelegate.me a continuación, crear la ventana principal en el código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| void ) applicationDidFinishLaunching : ( UIApplication * ) application { - (Void) applicationDidFinishLaunching: (UIApplication *) {aplicación
/ / Obtener el tamaño de la pantalla (320, 480) UIScreen mainScreen ] applicationFrame ] ; CGRect windowRect = [[Principal UIScreen] applicationFrame]; / / Se crea una ventana - como lo hemos hecho en Interface Builder bye bye [ [ UIWindow alloc ] initWithFrame : windowRect ] ; MainWindow UIWindow * = [[UIWindow alloc] initWithFrame: windowRect]; / / Establecer el fondo de la ventana de color amarillo, para diferenciar / / El FirstApp solicitud anterior [ UIColor yellowColor ] ] ; [SetBackgroundColor MainWindow: [UIColor yellowColor]];
mainWindow ] ; [Self SetWindow: MainWindow]; ; [Ventana makeKeyAndVisible];
; [MainWindow liberación]; } |
Ya se puede probar la aplicación, si usted consigue una ventana amarilla que lo hizo todo bien!
, necessario solo se si usa Interface Builder. En el archivo de SecondAppAppDelegate.h podemos eliminar IBOutlet , sólo es necesario si se utiliza Interface Builder. También añadir que nuestras variables globales, la última vez que había entrado en el controlador. A continuación, modificar el archivo SecondAppAppDelegate.h :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # Importar <UIKit/UIKit.h> NSObject <UIApplicationDelegate> { @ Interface SecondAppAppDelegate: NSObject {<UIApplicationDelegate> UIWindow * ventana; UITextField * número; UIButton botón *; numeroACaso int; } nonatomic, retain ) UIWindow * window; @ Propiedad (no atómica, retener) UIWindow ventana *; void ) controllaNumero; - (Void) obtenerNumero; @ End |
, in quanto non stiamo usando Interface Builder. Una vez más, hemos preparado la definición del método controllaNumero , como la última vez, pero hemos eliminado la indicación IBAction , porque no se está utilizando Interface Builder.
Creamos la interfaz de código
Es el momento de crear código con todos los componentes de nuestra interfaz. ed inseriamo il seguente codice: Volvamos al archivo SecondAppAppDelegate.m , posizioniamoci antes [mainWindow release] e introduzca el siguiente código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| / / Creamos la barra de título [ [ UINavigationBar alloc ] initWithFrame : CGRectMake ( 0.0 , 0.0 , 320.0 , 44.0 ) ] ; UINavigationBar myNavigationBar * = [[UINavigationBar alloc] initWithFrame: CGRectMake (0.0, 0.0, 320.0, 44.0)]; myNavigationBar.barStyle = UIBarStyleDefault; [ [ UINavigationItem alloc ] initWithTitle : @ "Indovina un numero" ] ; UINavigationItem navigationItem * = [[UINavigationItem alloc] initWithTitle: @ "Adivina el número"]; navigationItem animated : NO ] ; [MyNavigationBar pushNavigationItem: navigationItem animados: NO]; myNavigationBar ] ; [Ventana addSubview: myNavigationBar];
/ / Crear la etiqueta [ [ UILabel alloc ] initWithFrame : CGRectMake ( 10 , 50 , 300 , 80 ) ] ; UILabel myLabel * = [[UILabel alloc] initWithFrame: CGRectMake (10, 50, 300, 80)]; UIColor clearColor ] ; myLabel.backgroundColor = [UIColor clearColor]; ; myLabel.numberOfLines = 2; "iPhone ha pensato un numero da 1 a 10, prova ad indovinarlo?" ; myLabel.text = @ "El iPhone ha diseñado un número del 1 al 10, trata de adivinar?" myLabel ] ; [Ventana addSubview: myLabel];
/ / Crear entrada de texto UITextField alloc ] initWithFrame : CGRectMake ( 10 , 120 , 300 , 30 ) ] ; = número [[UITextField alloc] initWithFrame: CGRectMake (10, 120, 300, 30)]; numero.borderStyle = UITextBorderStyleRoundedRect; numero.textAlignment = UITextAlignmentCenter; numero.keyboardType = UIKeyboardTypeNumberPad; "Inserisci il numero" ; numero.placeholder = @ "Introduzca el número"; numero ] ; [Ventana addSubview: número];
/ / Crear el botón UIButton buttonWithType : UIButtonTypeRoundedRect ] ; botón = [UIButton buttonWithType: UIButtonTypeRoundedRect]; 10 , 180 , 300 , 30 ) ; bottone.frame CGRectMake = (10, 180, 300, 30); @ "Premi qui" forState : UIControlStateNormal ] ; [Botón setTitle: @ "Click Aquí" Forst: UIControlStateNormal]; self action : @selector ( controllaNumero ) forControlEvents : UIControlEventTouchUpInside ] ; El botón [AddTarget: acción de auto: @ selector (obtenerNumero) forControlEvents: UIControlEventTouchUpInside]; bottone ] ; [Ventana addSubview: botón];
; [MyLabel liberación]; ; [NavigationItem liberación]; ; [MyNavigationBar liberación]; |
della scorsa volta, subito dopo il [mainWindow release]; inseriamo: Desde el ' applicationDidFinishLaunching corresponde a viewDidLoad que la última vez, justo después de la [mainWindow release]; insertar:
1
| + arc4random ( ) % 10 ; numeroACaso arc4random = 1 + () 10%; |
Ahora que podemos hacer es implementar el método controllaNumero , que será idéntico (aparte del prototipo) para que el tiempo utilizado por última vez:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| void ) controllaNumero { - (Void) {obtenerNumero "Premuto bottone di controlla numero" ) ; NSLog (@ "número presionado el botón de control"); [ numero.text integerValue ] ; numeroInserito = int [numero.text integerValue]; message; NSString * mensaje; "Il numero inserito è %d" , numeroInserito ) ; NSLog (@ "El número introducido es% d", numeroInserito); numeroInserito <numeroACaso ) { if (numeroInserito <numeroACaso) { "Troppo basso..." ; message = @ "demasiado baja ..."; ( numeroInserito> numeroACaso ) { } Else if (numeroInserito> numeroACaso) { "Troppo alto..." ; message = @ "demasiado alto ..."; ( numeroInserito == numeroACaso ) { } Else if (numeroInserito numeroACaso ==) { "Bravo hai indovinato" ; message = @ "Bravo, lo habéis adivinado"; + arc4random ( ) % 10 ; numeroACaso arc4random = 1 + () 10%; "Numero pensato %d" , numeroACaso ) ; NSLog (@ "% d Número de pensamiento," numeroACaso); } [ [ UIAlertView alloc ] UIAlertView alertMessaggio * = [[UIAlertView alloc] "Responso" initWithTitle: @ "Respuesta" mensaje: mensaje delegado: nil "OK" cancelButtonTitle: @ "OK" ] ; otherButtonTitles: nil]; ; [AlertMessaggio show]; ; [AlertMessaggio liberación]; "" ; numero.text @ = ""; } |
Ya hemos terminado!
Conclusiones y consideraciones
, proprio perchè volevo lasciarlo il più semplice e snello possibile e, anche, per dimostrare che non sono elementi sempre necessari. Este ejemplo no hacer uso directo de un UIView o UIViewController , sólo porque me quería ir lo más simple y ágil como sea posible y, también, para mostrar que los elementos no siempre son necesarias. Sin embargo insertar objetos directamente en la ventana puede tener algún sentido en este ejemplo y otros contextos esporádicos. portano comunque benefici in tantissimi altri casi, ein alcuni sono praticamente indispensabili; come avremo modo di vedere in futuro. El uso de UIView y UIViewController traer beneficios en muchos otros casos, sin embargo, algunos son ein prácticamente indispensable, como veremos en el futuro.
Continuación ...
Xcode es un muy potente y versátil y ofrece al programador con muchas características útiles y fáciles de usar. Al escribir código complejo, o por lo menos articulado, es importante para organizar el código para que no pierdas el tiempo buscando las funciones de extensión en las líneas largas de código. Después de comentar, lo primero y más importante que hacer, el entorno XCode proporciona directrices (NICE) para mejorar la usabilidad y legginilità en el desarrollo. Una de ellas es la directiva #pragma mark que es muy útil en la organización de los grupos del código y los métodos.
En la siguiente imagen se puede ver la parte del código de mi proyecto PragmaTest :

En el menú desplegable superior le permite a la lista de todos los métodos de nuestra clase. Ahora bien, si insertamos nuestro método sobre la directiva #pragma mark que tiene una sintaxis:
1
| Marca # Pragma {etiqueta} |
Se obtiene:

El primer #pragma mark con un guión (-) inserta una línea de separación. El segundo es un texto (etiqueta) al gusto. Usted puede agregar la siguiente declaración en la que desea, la organización del código como mejor le parezca. Puede introducir más pragmático líneas, escriba:
1 2 3 4 5 6
| # Pragma marca - # Pragma marca / ** # Pragma marca * Usando el pragma # Pragma * marca en varias líneas de código # Pragma marca * / void ) mioMetodo { } - (Void) {} miMetodo |
Continuación ...
Últimos Comentarios
Marcos : @ Marcos: Gracias por la respuesta. Por ejemplo, si usted tiene un código para guardar / utilizar la carpeta ...
Marcos : Gracias por la respuesta. Por ejemplo, si usted tiene un código para guardar / utilizar la carpeta ...
Giovambattista Fazioli : @ Marcos: en principio, absolutamente, mucho depende de cómo y por qué descargar. Luisiana ..
Marcos : Hola, buen guía! Quería preguntarle, usted puede usar el mismo código para ejecutar una base de datos sql? En lugar de ...
José : Hola quería preguntar cómo se puede hacer en el post que he subido una galería de 50 imágenes, por ejemplo, ...