'Mobile' Categoría


XCode 3.1.3: Restaurar el SDK 2.2.1

Sólo para los desarrolladores registrados han lanzado una nueva versión del SDK para el iPhone de Apple, así que es momento de instalar el SDK 3.0, con lo que la actualización de todo el entorno de desarrollo Xcode 3.1.3 a la versión. Si ya ha actualizado se habrá dado cuenta que la creación de un nuevo proyecto parece estar perdiendo la antigua 2.2.1 SDK (incluyendo otros).

xcode313

De hecho, todo está aquí en nuestra máquina, sólo puede realizar un procedimiento sencillo para restaurar mágicamente todos nuestros SDK anteriores, así que pruebe nuestra aplicación para el iPhone de Apple es la 3.0 SDK que con las versiones anteriores 2.2.1 e inferiores. Seleccione el proyecto, abra el menú contextual y seleccione Obtener información:

xcode131menu

En la ventana que se abre, por primera vez en la pestaña General, seleccione el SDK Base baja para todas las configuraciones y restaurado 2.2.1 (o lo que sea) SDK.

xcode313info

Sin que, por arte de magia, el menú volverá a mostrar todas las XCode SDK 3.0 incluyendo

xcode313ok

Continuación ...

iPhone: todas las fuentes del sistema

El iPhone de Apple ofrece un número limitado de tipos de letra para los desarrolladores. La lista de fuentes disponibles es fácil de lograr por el código, como veremos más adelante. Si desea utilizar sus propias fuentes, como la inclusión en los recursos, es un poco más articulado y conivolge también la expedición de certificados (derechos) fuentes "embed" ... vamos a hablar más tarde. Cambio, en cuanto a las fuentes oficiales presentes en el iPhone son (haga clic sobre la imagen para ampliar):

iphonefonts

El Apple iPhone SDK permite el acceso a las fuentes del sistema especial. Estos son identificados por las constantes especiales y son los siguientes:

1
2
3
[ UIFont boldSystemFontOfSize : 12.0 ] ; UIFont myBoldFont * = [UIFont boldSystemFontOfSize: 12,0];
[ UIFont SystemFontOfSize : 12.0 ] ; UIFont mySystemFont * = [UIFont SystemFontOfSize: 12,0];
[ UIFont italicSystemFontOfSize : 12.0 ] ; UIFont myItalicFont * = [UIFont italicSystemFontOfSize: 12,0];

Si usted consigue realmente un puntero a una Odei fuentes se muestra en la imagen de arriba sólo tiene que utilizar:

1
[ UIFont fontWithName : @ "Helvetica-Bold" size : 22.0 ] ; UIFont myCustomFont * = [fontWithName UIFont: @ "Helvetica-Bold", tamaño: 22,0];

Como se puede ver la dirección de la fuente es especial, además de la familia (Helvetica, Courier, etc ...) debe especificar el tipo (negrita, cursiva, etc ...). En la práctica, por lo tanto, una fuente debe estar equipado con estas características. La Helvética, por ejemplo, está representada por:

1
2
3
4
Helvetica
Helvetica-Bold
Helvetica-Oblique
Helvetica-BoldOblique

Si desea visualizar sus fuentes directamente en el iPhone, he aquí algunas líneas de código de utilidad:

1
2
3
4
5
6
7
8
9
10
11
12
listOfFonts = [ [ NSArray alloc ] initWithArray : [ UIFont familyNames ] ] ; NSArray listOfFonts * = [[ NSArray alloc] initWithArray: [UIFont familyNames]];
subFontTypes; NSArray * subFontTypes;

int i = 0 ; i< [ listOfFonts count ] ; i ++ ) { for (int i = 0; i <[listOfFonts cuenta]; i + +) {
"Font Family: %@" , [ listOfFonts objectAtIndex : i ] ) ; NSLog (@ "Font Family:% @", [objectAtIndex listOfFonts: i]);
NSArray alloc ] initWithArray : [ UIFont fontNamesForFamilyName : [ listOfFonts objectAtIndex : i ] ] ] ; subFontTypes = [[ NSArray alloc] initWithArray: [UIFont fontNamesForFamilyName: [objectAtIndex listOfFonts: i]]];
int j = 0 ; j< [ subFontTypes count ] ; j ++ ) { for (int j = 0 j <[subFontTypes cuenta] j + +) {
"+----->Type: %@" , [ subFontTypes objectAtIndex : j ] ) ; NSLog (@ Tipo "+----->:% @ ", [objectAtIndex subFontTypes: j]);
}
; [Liberación SubFontTypes];
}
; [ListOfFonts liberación];

Con la SDK 2.2.1 en mi simulador, que tengo:

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Familia de fuentes: Courier
Tipo +----->: Courier
Tipo +----->: Courier-BoldOblique
Tipo +----->: Courier-Oblique
Tipo +----->: Courier-Bold
Font Family: AppleGothic
Tipo +----->: AppleGothic
Familia de la fuente: Arial
Tipo +----->: ArialMT
+-----> Tipo: Arial-BoldMT
+-----> Tipo: Arial-BoldItalicMT
+-----> Tipo: Arial-ItalicMT
Font Family: sLa TC
Tipo +----->: Luz STHeitiTC
+-----> Tipo: Media-STHeitiTC
Font Family: Hiragino Kaku Pron gótico
Tipo +----->: HiraKakuProN-W6
Tipo +----->: HiraKakuProN-W3
Familia de fuentes: Courier New
Tipo +----->: CourierNewPS-BoldMT
Tipo +----->: CourierNewPS-ItalicMT
Tipo +----->: CourierNewPS-BoldItalicMT
Tipo +----->: CourierNewPSMT
Familia de fuentes: Zapfino
+-----> Tipo: Zapfino
Familia de la fuente: Arial Unicode MS
Tipo +----->: ArialUnicodeMS
Font Family: sLa SC
Tipo +----->: Media-STHeitiSC
Tipo +----->: Luz STHeitiSC
Font Family: Máquina de escribir de América
Tipo +----->: AmericanTypewriter
Tipo +----->: AmericanTypewriter-Bold
Familia de fuentes: Helvetica
+-----> Tipo: Helvetica-Oblique
+-----> Tipo: Helvetica-BoldOblique
+-----> Tipo: Helvetica
Tipo +----->: Helvetica-Bold
Font Family: rotulador
Tipo +----->: Thin-MarkerFelt
Familia de fuentes: Helvetica Neue
Tipo +----->: HelveticaNeue
+-----> Tipo: HelveticaNeue-Bold
Font Family: DB LCD Temperatura
Tipo +----->: DBLCDTempBlack
Familia de fuentes: Verdana
+-----> Tipo: Verdana-Bold
Tipo +----->: Verdana-BoldItalic
+-----> Tipo: Verdana
Tipo +----->: Verdana-Italic
Familia de letra: Times New Roman
Tipo +----->: TimesNewRomanPSMT
Tipo +----->: TimesNewRomanPS-BoldMT
Tipo +----->: TimesNewRomanPS-BoldItalicMT
Tipo +----->: TimesNewRomanPS-ItalicMT
Font Family: Georgia
+-----> Tipo: Georgia-Bold
+-----> Tipo: Georgia
+-----> Tipo: Georgia-BoldItalic
+-----> Tipo: Georgia-Italic
Font Family: sLa J
+-----> Tipo: Media-STHeitiJ
+-----> Tipo: Luz STHeitiJ
Familia de la fuente: Arial Rounded MT Bold
Tipo +----->: ArialRoundedMTBold
Font Family: Trebuchet MS
Tipo +----->: TrebuchetMS-Italic
Tipo +----->: TrebuchetMS
+-----> Tipo: Trebuchet-BoldItalic
Tipo +----->: TrebuchetMS-Bold
Font Family: sLa K
Tipo +----->: Media-STHeitiK
Tipo +----->: Luz STHeitiK

Continuación ...

Cómo borrar NSLog () de la fuente de XCode

<a target="_blank" href="http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NSLog">NSLog()</a> una función útil durante las primeras etapas de un proyecto para probar y depurar una aplicación para el iPhone de Apple o, más generalmente, en el entorno XCode. Siendo sólo una función, al igual que el otro, su presencia se hará sentir, incluso cuando la liberación (release) nuestro ejecutable. potrebbero influire sulle performance della nostra applicazione, soprattutto se abbiamo inserito NSLog() all'interno di loop. Se hace necesario para eliminar, de alguna manera, todas las filas de NSLog() de nuestro código, porque ya no es necesaria, y porque las llamadas a NSLog() podría afectar el rendimiento de nuestra aplicación, sobre todo si ponemos NSLog() para 'bucle interno.

Descartar inmediatamente la solución a la "mirada" y "cancelar" porque un día podría ser usado de nuevo. Se excluye la solución de la "apariencia" y "comentarios", incómodo por la misma razón que antes. Afortunadamente, uno. Limpio, simple, y está utilizando el compilador condicionales correcta ¿Qué vamos a hacer en la práctica, y decirle al compilador que excluir - si hay una condición específica - la hora de elaborar nuestras líneas de código que contienen NSLog() .

Las directivas de compilador y las declaraciones de compilación condicional, es un muy poderoso y generalizado. Los procedentes de la elaboración de la norma ANSI-C conoce muy bien y definitivamente utilizzte en muchas situaciones. La peculiaridad de estas "instrucciones" radica en el hecho, mencionado anteriormente, para ser vistos por el compilador y ejecutable no. Esta característica los hace útiles en muchos casos y puede resolver los problemas de otro modo muy molesto.

Veamos un ejemplo de código que, como se predijo, se puede "borrar" de la compilación de código compartido, en nuestro caso NSLog() :

1
2
3
4
5
6
# Definición de una ACTIVE_NSLOG
/ / Si la constante se define ACTIVE_NSLOG llenar
/ / El bloque de código entre # ifdef y # endif
# Ifdef ACTIVE_NSLOG
" ... bla bla" ) ; NSLog (@ "... bla, bla");
# Endif

). Las instrucciones condicionales son parte del compilador de la misma familia que #define , también, de hecho, son precedidos por una "libra" ( # ). solo se ACTIVE_NSLOG è definito. En el ejemplo mostrado, hemos definido una constante ACTIVE_NSLOG , las siguientes líneas de código indica al compilador de "incluir" línea NSLog() sólo si ACTIVE_NSLOG se define. Si nos ocupamos, durante la redacción de nuestro código, para realizar llamadas a NSLog() dentro del bloque #ifdef ... #endif per far sparire, alla prossima compilazione, tutti i nostri NSLog() . #ifdef ... #endif , basta con borrar la definición de la constante ACTIVE_NSLOG a desaparecer, la siguiente compilación, todos nuestros NSLog() .

Una mejor y final

Veamos ahora cómo configurar el entorno XCode para mejorar aún más lo que hemos hecho aquí! En primer lugar se elige un nombre de constante que utilizamos en nuestros proyectos para excluir de la compilación NSLog() . o quello che preferite. Usted puede elegir el nombre que desee, desde DEBUG a MIO_DEBUG o lo que sea que usted prefiera. Abra su proyecto, nuevo o viejo. Introduzca todos los NSLog() dentro del bloque (o bloques):

1
2
3
# Ifdef MIO_DEBUG
" ... bla bla" ) ; NSLog (@ "... bla, bla");
# Endif

Seleccione el archivo principal de su proyecto, haga clic en el botón derecho y elegir la opción Obtener información.

getinfo

Esto abre una ventana con información sobre el proyecto:

userdefine

Seleccione la pestaña Crear, comprobar que está en la configuración de depuración (esta es la joya), vaya a la sección definida por el usuario y agregar, a través del botón en la parte inferior izquierda, un nuevo campo llamado OTHER_CFLAGS . En este valor assegnamoli -DMIO_DEBUG=1 . La sintaxis es -D{mia define}=1 .

Este procedimiento tiene dos ventajas:

  1. No debemos poner en el código #define MIO_DEBUG 1 , pero lo hacemos a través de la información del proyecto. Por lo tanto, cuando vamos a llenar la versión de lanzamiento (el uno sin el NSLog() ) no tiene que acordarse de eliminar la línea #define MIO_DEBUG 1
  2. La constante se define en relación a la configuración, en nuestro caso, de depuración. Por lo tanto, cambiar a la versión de configuración (la liberación) va a estar ausente y las filas constante con NSLog() no se compila

Conclusiones

El procedimiento anterior puede ser útil en otros casos moltidutine, con NSLog() , no tienen nada que hacer. Las instrucciones condicionales pueden ayudar a que el compilador en una amplia gama de contextos. A menudo son utilizados por los programadores para determinar el tipo de sistema operativo, la versión, el objetivo, la presencia de los procesadores de matemáticas, mientras que el mantenimiento de la misma "misma" fuente.

Para entender, por ejemplo, podemos utilizzre nuestra constante MIO_DEBUG también intervenir en otras áreas del código:

1
2
3
4
5
6
7
8
9
10
/ / Debug si ganan el juego
/ / Con una puntuación de 100 en vez de 10000:)
# Ifdef MIO_DEBUG
score == 100 ) if (calificación == 100)
# Else
score == 10000 ) if (puntuación == 10000)
# Endif
{
; [HaiVinto mismo];
}

Para terminar, he aquí algunos ejemplos y variantes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/ / En general, hay
# Si la expresión
/ / Si la declaración similar a la tradicional, por lo que con una expresión de completa

/ / Comprobar si una constante se define
# Constante Ifdef

/ / Comprobar si NO es una constante definida
# Ifndef constante

/ / Else
# Else

/ / Cerrar el bloque
# Endif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/ / Por ejemplo ...
# Define DEBUG 1
5 # define MIA_ALTRA_COSTANTE

...
# Si DEBUG
/ / Rellena el siguiente
# Else
/ / En caso contrario llenar este otro
# Endif

# Si MIA_ALTRA_COSTANTE> 4
"..." ) ; NSLog (@ "...");
# Endif
1
2
3
4
# Ifndef INCLUDE_MIO_FILE
# Definir INCLUDE_MIO_FILE
# Include "mio_file.h"
# Endif

Continuación ...

Objective-C: tipo de conversión

Con algunos lenguajes de alto nivel, tales como JavaScript o PHP, cuando los datos no se escriben o de otra manera no se puede, somos "mimados" de comparar o convertir cadenas y enteros, y viceversa, todo escondido o manipulado por el intérprete (o compilador ). Por ejemplo, en las funciones de JavaScript son "forzadas" (como parseInt() , por ejemplo) requiere en casos especiales. Sin embargo, en otras circunstancias en que tratamos sin preocuparse por una conversión de todo tipo entero (explícito), tales como:

1
2
3
5 ; mioNumero var = 5;
/ / ...
"Il valore di mioNumero è " + mioNumero ) ; alert ("El valor de mioNumero es" + mioNumero);

En Objective-C, sin embargo, el tipo de datos es importante y el tipo de conversión debe ser explícita. Además de la fundición (mejor encasillamiento) podemos usar las características y funcionalidades específicas para el tipo de conversión. Por ejemplo, aquí es cómo convertir un entero a una cadena:

1
2
3
4
5 ; mioNumero int = 5;
miaStringa = [ NSString stringWithFormat : @ "%d" , mioNumero ] ; NSString * MyString = [ NSString stringWithFormat: @ "% d", mioNumero];
/ /
"miaStringa=%@ mioNumero=%i" , miaStringa, mioNumero ) ; NSLog (@ "myString = @% mioNumero =% i", miCadena, mioNumero);

Por el contrario, aquí es cómo convertir una cadena a un entero:

1
2
3
4
miaStringa = @ "128" ; NSString * MyString = @ "128";
[ miaStringa integerValue ] ; mioNumero int = [miCadena integerValue];
/ /
"miaStringa=%@ mioNumero=%i" , miaStringa, mioNumero ) ; NSLog (@ "myString = @% mioNumero =% i", miCadena, mioNumero);

Continuación ...

fragmento de código iPhone: UIAlertView

La clase UIAletrView le permite mostrar una ventana modal (animación) para informar y / o que se haga algo. El UIAlterView (ver alertas) son muy cómodas y fáciles de usar. La gestión de la respuesta del usuario se resuelve mediante la interceptación de que el índice del botón pulsado. Para ver un simple UIAlterView acaba de escribir:

1
2
3
4
/ / Alerta con un simple botón, sin devolución de llamada
[ [ UIAlertView alloc ] initWithTitle : @ "Titolo" message : @ "Messaggio" cancelButtonTitle : @ "Annulla" otherButtonTitles : nil ] ; UIAlertView MyAlert * = [[UIAlertView alloc] initWithTitle: @ "Título" mensaje: @ "Mensaje" cancelButtonTitle: @ "Cancelar" otherButtonTitles: nil];
; [MyAlert show];
; [MyAlert liberación];

Y 'posible para añadir botones adicionales otherButtonTitles :

1
2
3
4
/ / Alerta con dos simples botones, sin devolución de llamada
[ [ UIAlertView UIAlertView MyAlert * = [[UIAlertView
; [MyAlert show];
; [MyAlert liberación];

: Para determinar qué botón se ha pulsado, simplemente agregue el delegate:self inicialización de objetos UIAlterView :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/ / Alert sencillo con dos botones y callbacks
[ [ UIAlertView alloc ] initWithTitle : @ "Titolo" message : @ "Messaggio" delegate : self cancelButtonTitle : @ "Annulla" otherButtonTitles : @ "Ok" , nil ] ; UIAlertView MyAlert * = [[UIAlertView alloc] initWithTitle: @ "Título" mensaje: @ "Mensaje" delegado: cancelButtonTitle auto: @ "Cancelar" otherButtonTitles: @ "OK", nil];
; [MyAlert show];
; [MyAlert liberación];

/ / La llamada se ve así

void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) clickedButtonAtIndex alertView: (NSInteger) {buttonIndex
buttonIndex ) { switch (buttonIndex) {
: caso 1:
/ / Código
break;
}
}

La devolución de llamada alertView necesidad de contar con ese nombre, para obtener más información, consulte UIAlertViewDelegate

punteranno sempre a quella. Con sólo el callbck alertView:clickedButtonAtIndex más UIAletrView siempre apuntará a eso. Usando la etiqueta del campo UIAletrView , podemos determinar cuál es el "llamador":

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/ / Alert sencillo con dos botones y callbacks
[ [ UIAlertView alloc ] initWithTitle : @ "Titolo" message : @ "Messaggio" delegate : self cancelButtonTitle : @ "Annulla" otherButtonTitles : @ "Ok" , nil ] ; UIAlertView MyAlert * = [[UIAlertView alloc] initWithTitle: @ "Título" mensaje: @ "Mensaje" delegado: cancelButtonTitle auto: @ "Cancelar" otherButtonTitles: @ "OK", nil];
; myAlertA.tag = 1;
; [MyAlert show];
; [MyAlert liberación];

/ /
[ [ UIAlertView alloc ] initWithTitle : @ "Titolo" message : @ "Messaggio" delegate : self cancelButtonTitle : @ "Annulla" otherButtonTitles : @ "Ok" , nil ] ; UIAlertView myAlertB * = [[UIAlertView alloc] initWithTitle: @ "Título" mensaje: @ "Mensaje" delegado: cancelButtonTitle auto: @ "Cancelar" otherButtonTitles: @ "OK", nil];
; myAlertA.tag = 2;
; [MyAlertB show];
; [MyAlertB liberación];

/ / Múltiples gestión UIAlertView

void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) clickedButtonAtIndex alertView: (NSInteger) {buttonIndex
"Alert Tag: %i" , alertView.tag ) ; NSLog (@ "Etiquetas de alerta:% i", alertView.tag);
"buttonIndex: %i" , buttonIndex ) ; NSLog (@ "buttonIndex:% i", buttonIndex);
}

Continuación ...

iPhone Objective-C sintaxis de equivalencia

La sintaxis con corchetes en Objective-C es una de las razones más frustración para los que vienen de otros idiomas (por objetos). Sin embargo, acostumbrarse a él, te das cuenta de cómo leer el código se vuelve demasiado con esta mezcla de clásico y más claramente Smalltalk sintaxis. Por ejemplo, podemos ver cómo el mismo procedimiento se puede escribir tanto en la sintaxis. Tome la inicialización de un UIAlertView :

1
2
3
4
5
6
7
8
[ [ UIAlertView alloc ] initWithTitle : @ "Titolo" UIAlertView MyAlert * = [[UIAlertView alloc] initWithTitle: @ "Título"
"Messaggio" mensaje: @ "Mensaje"
delegado:
"Annulla" cancelButtonTitle: @ "Cancelar"
"Ok" , nil ] ; otherButtonTitles: @ "OK", nil];
; myAlert.tag = 1;
; [MyAlert show];
; [MyAlert liberación];

El ajuste de la potavamo etiqueta que aún así:

1
2
3
4
5
6
7
8
[ [ UIAlertView alloc ] initWithTitle : @ "Titolo" UIAlertView MyAlert * = [[UIAlertView alloc] initWithTitle: @ "Título"
"Messaggio" mensaje: @ "Mensaje"
delegado:
"Annulla" cancelButtonTitle: @ "Cancelar"
"Ok" , nil ] ; otherButtonTitles: @ "OK", nil];
1 ] ; [MyAlert de configuración: 1];
; [MyAlert show];
; [MyAlert liberación];

Lo mismo en la lectura durante el evento:

1
2
3
4
5
void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) clickedButtonAtIndex alertView: (NSInteger) {buttonIndex
alertView.tag == 1 ) { // ... if (alertView.tag == 1) {/ / ...
/ / O
alertView tag ] == 1 ) { // ... if ([alertView tag] == 1) {/ / ...
}

Nota: No todas las propiedades o los métodos que esta sintaxis dual. En el caso de ' UIAlertView tenemos esta doble funcionalidad. Para otros objetos, o en otros casos, sin embargo, sólo uno de los dos podría funcionar ... pero no preguntes por qué (en función de cómo los desarrolladores han definido la interfaz).

Continuación ...

Traza Actionscript, Objective-C NSLog ()

, usata per il debug delle applicazioni. La toma de posesión de ActionScript para Objective-C (donde se compara el código y la sintaxis de ActionScript y Objective-C), que tienen la característica conveniente en ActionScript trace ( ) , que se utiliza para depurar aplicaciones. Esta función genera una consola en el entorno de desarrollo de Flash. Se utiliza principalmente para la depuración y las pruebas de la "película" / aplicación. En XCode / Objective-C tenemos: NSLog ( ) . di Actionscript: La sintaxis de esta función es muy similar a la trace ( ) en ActionScript:

1
"Sono una linea di debug" ) ; NSLog (@ "Yo soy la depuración de una línea");

En ActionScript, tenemos:

1
"Sono una linea di debug" ) ; trace ("Yo soy la depuración de una línea");

Además del uso de la arroba (@), como se puede ver, son idénticos. Las diferencias (y similitudes) comienzan cuando se quiere mostrar los valores de las variables, por ejemplo, en Actionscript tenemos:

1
2
3
"Coordinata x:" + x + " coordinata y:" + y ) ; trace ("coordenada x:" + x + "y coordinar:" + y);
/ / O
"Coordinate: " , x , y ) ; trace ("Coordenadas", x, y);

En Objective-C tenemos:

1
"Coordinata x:%i coordinata y:%i" , x, y ) ; NSLog (@ "Coordenada x: la coordenada%% i", x, y);

che opera sull'Apple System Log. Nota: NSLog() en realidad llama a la función más genérica NSLogv ( ) que funciona en el registro del sistema ejecución. Las funciones son de hecho iguales, cambiando únicamente los parámetros de entrada.

o sprintf ( ) . Los desarrolladores se encuentran muy familiarizados con el formato de cadenas de C, como printf ( ) o sprintf ( ) . Para obtener más información, consulte los especificadores de formato de cadena .

Continuación ...

Truco muy corto: NSTimer parada

El uso de temporizadores ( NSTimer ) para desarrollar aplicaciones para el iPhone de Apple es muy frecuente, no sólo en la fabricación de juegos. Uno de los problemas con los que uno puede chocar es la asincronía del temporizador, que puede dar lugar, durante la detención de uno o más contadores de tiempo, la caída de nuestra aplicación. , si invoca la invalidate che, appunto, arresta il timer. Cuando se quiere detener uno o varios temporizadores, donde repeats está establecido en YES , se invoca el invalidate que, precisamente, el temporizador se detiene.

Continuación ...

Apple iPhone 3.0 SDK: Corregido bug en UIButton buttonWithType

Como se indica en el mensaje de Apple iPhone 3.0 SDK: incompatibilidad primero de la 3.0 SDK de Apple muestran diferentes comportamientos con respecto a la versión 2.2.1. Servicio de apoyo a los desarrolladores me dio la respuesta, y entonces la solución al problema. . La respuesta fue que el apoyo técnico [UIButton buttonWithType:] ya llamada - interno - la initWithFrame . De ello se desprende que, de acuerdo con el apoyo técnico, por escrito:

Continuación ...

De ActionScript para Objective-C

Pensé que podría ser útil para aquellos que recientemente han abordado el desarrollo de aplicaciones para el iPhone de Apple, comparar Adobe ActionScript - el lenguaje usado en Adobe Flash y Adobe Flex, más común entre los neo-programadores - y el lenguaje Objective-C utilizado por Apple para desarrollar sus aplicaciones. Objective-C es en efecto un lenguaje orientado a objetos en el sentido puro, no es que no se actionscript, pero Objective-C es sin duda una ventaja, ya que es una extensión del estándar ANSI C y su sintaxis es una mezcla entre C / C + + y Smalltalk, es un verdadero OO (Object-Oriented Language).

Continuación ...