'Mobile' Categoría
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).

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:

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.

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

Continuación ...
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):
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 ...
<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.

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

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:
- 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 - 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 ...
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 ...
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 ...
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: sí "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: sí "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 ...
, 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 ...
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 ...
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 ...
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 ...
Últimos Comentarios
Simon : Se molesta perturbado de nuevo y utilizar ese espacio para estas cosas ... sin embargo, no funciona ...
Giovambattista Fazioli : @ Simon: ¿qué puede ser debido a la sintaxis que utiliza, específicamente para PHP 5 +,...
Simon : He probado la noche anterior poner todo en functions.php, formas bien, jQuery, y las fichas que jQueryUI ...
Giovambattista Fazioli : @ Simon: Yo recomiendo la limpieza de ingresar un código como el de ...
Simon : @ Giovambattista Fazioli: Gracias por su paciencia, todo está claro ... ahora me siento ahora, ...