Arquivo Junho de 2009
Saidmade Ltd. , apesar do aparente momento de crise, proporciona uma grande oportunidade para jovens entusiastas da computação. A "oferta de trabalho real é dirigida a todos aqueles que desejam trabalhar como desenvolvedor, uma profissão que exige paixão e muita vontade, muitas vezes subestimada, especialmente aqui na Itália. As empresas parceiras que, portanto, está à procura de um programador / programador júnior com os seguintes requisitos:
- Idade entre 18 e 27 anos e uma boa dose de criatividade
- Conhecimentos básicos de programação e, especialmente, da linguagem ANSI-C
Desejam adquirir conhecimentos sobre:
- OO Programming
- PHP
- Javascript
- Adobe ActionScript
- C + + / Objective-C
É também uma vantagem do conhecimento:
Se o seu perfil e seus interesses estão refletidos no exemplo acima, por favor, envie sua proposta para condidatura: info@saidmade.com
Leia mais ...
A IDE Aptana também está disponível como um plugin para o Eclipse . Uma das características mais apreciadas deste ambiente é uma excelente gestão e sincronização de arquivos FTP / projeto local com controle remoto. Em particular, há um script que permite que você envie o código atualmente na janela do editor para o servidor remotamente usando o CONTROLE combinação de teclas + SHIFT + U ou Command + Shift + U no Mac OS (a mesma combinação é utilizada em Adobe Dreamweaver). Em algumas instalações (por exemplo, meu Mac OS, e Eclipse com Aptana plugin) esta combinação parece estar ausente e, se você tentar rastreá-lo nas Preferências> Geral> Chaves não vai encontrar - misteriosamente - nada! O problema, no entanto, é facilmente resolvida e depende da sobreposição de uma outra configuração. É evidente que a combinação de teclas mencionadas acima é definido por padrão para outra função: Mostra Ocorrências em arquivo Quick Menu. Em seguida, basta abrir o painel de Preferências> Geral> Chaves e programas de pesquisa occ ..:

Rimuivere a "ligação", ou seja, a associação com o atalho de teclado, e vai trabalhar!
Leia mais ...
O iPhone da Apple fornece um número limitado de fontes para desenvolvedores. A lista de fontes disponíveis é facilmente alcançado através de código, como veremos. Se você quiser usar suas próprias fontes, por exemplo, incluindo-o nos recursos, é um pouco mais articulada e conivolge também a emissão de licenças (direitos) sobre as fontes "embeddati" ... falaremos mais tarde. Voltando ao invés de apresentar o iPhone nell'Apple oficial font estes são (clique na imagem para ampliar):
O Apple iPhone SDK permite o acesso às fontes de sistema especiais. Estes são identificados por constantes particulares e são:
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]; |
Se você realmente obter um ponteiro para um odei font mostrado na imagem acima é só usar:
1
| [ UIFont fontWithName : @ "Helvetica-Bold" size : 22.0 ] ; UIFont myCustomFont * = [fontWithName UIFont: @ "Helvetica-Bold" Tamanho: 22,0]; |
Como se observa a gestão da fonte é especial, além da família (Helvetica, Courier, etc ...) deve especificar o tipo (negrito, itálico, etc ...). Na prática, portanto, uma fonte deve ser fornecida com estas características. A Helvética, por exemplo, está presente com:
1 2 3 4
| Helvetica Helvetica-Bold Helvetica-Oblique Helvetica-BoldOblique |
Se você quiser exibir suas fontes diretamente no iPhone, aqui vai uma linha de código úteis:
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 count]; i + +) { "Font Family: %@" , [ listOfFonts objectAtIndex : i ] ) ; NSLog (@ "Família Fonte:% @", [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 count] j + +) { "+----->Type: %@" , [ subFontTypes objectAtIndex : j ] ) ; NSLog (@ "+ -----> Digite:% @", [objectAtIndex subFontTypes: j]); } ; [Lançamento SubFontTypes]; } ; [ListOfFonts release]; |
Com o SDK 2.2.1 em minha hipoteca, eu tenho:
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
| Família de fontes: Courier + -----> Tipo: Courier + -----> Tipo: Courier-BoldOblique + -----> Tipo: Courier-Oblique + -----> Tipo: Courier-Bold Família de Fonte: AppleGothic + -----> Tipo: AppleGothic Família de fonte: Arial + -----> Tipo: ArialMT + -----> Tipo: Arial-BoldMT + -----> Tipo: Arial-BoldItalicMT + -----> Tipo: Arial-ItalicMT Família de Fonte: STHeiti TC + -----> Tipo: Light-STHeitiTC + -----> Tipo: Médio-STHeitiTC Família de Fonte: Hiragino Kaku Gothic Pron + -----> Tipo: HiraKakuProN-W6 + -----> Tipo: HiraKakuProN-W3 Família de fontes: Courier New + -----> Tipo: CourierNewPS-BoldMT + -----> Tipo: CourierNewPS-ItalicMT + -----> Tipo: CourierNewPS-BoldItalicMT + -----> Tipo: CourierNewPSMT Família de Fonte: Zapfino + -----> Tipo: Zapfino Família de fonte: Arial Unicode MS + -----> Tipo: ArialUnicodeMS Família de Fonte: STHeiti SC + -----> Tipo: Médio-STHeitiSC + -----> Tipo: Light-STHeitiSC Família de Fonte: Máquina de escrever americano + -----> Tipo: AmericanTypewriter + -----> Tipo: AmericanTypewriter-Bold Família de Fonte: Helvetica + -----> Tipo: Helvetica-Oblique + -----> Tipo: Helvetica-BoldOblique + -----> Tipo: Helvetica + -----> Tipo: Helvetica-Bold Família de Fonte: marcador de feltro + -----> Tipo: Thin-MarkerFelt Família de Fonte: Helvetica Neue + -----> Tipo: HelveticaNeue + -----> Tipo: HelveticaNeue-Bold Família de Fonte: DB LCD Temp + -----> Tipo: DBLCDTempBlack Família de Fonte: Verdana + -----> Tipo: Verdana Bold + -----> Tipo: Verdana-BoldItalic + -----> Tipo: Verdana + -----> Tipo: Verdana-Italic Família Fonte: Times New Roman + -----> Tipo: TimesNewRomanPSMT + -----> Tipo: TimesNewRomanPS-BoldMT + -----> Tipo: TimesNewRomanPS-BoldItalicMT + -----> Tipo: TimesNewRomanPS-ItalicMT Família de Fonte: Georgia + -----> Tipo: Georgia-Bold + -----> Tipo: Geórgia + -----> Tipo: Geórgia-BoldItalic + -----> Tipo: Georgia-Italic Família de Fonte: STHeiti J + -----> Tipo: Médio-STHeitiJ + -----> Tipo: Light-STHeitiJ Família de fonte: Arial Rounded MT Bold + -----> Tipo: ArialRoundedMTBold Família de Fonte: Trebuchet MS + -----> Tipo: TrebuchetMS-Italic + -----> Tipo: TrebuchetMS + -----> Tipo: Trebuchet-BoldItalic + -----> Tipo: TrebuchetMS-Bold Família de Fonte: STHeiti K + -----> Tipo: Médio-STHeitiK + -----> Tipo: Light-STHeitiK |
Leia mais ...
<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> uma função muito útil durante os estágios iniciais de um projeto para testar e depurar um aplicativo para o Apple iPhone ou, mais geralmente, no ambiente XCode. Sendo apenas uma função, assim como o outro, sua presença será sentida mesmo quando liberar (release) executável nosso. potrebbero influire sulle performance della nostra applicazione, soprattutto se abbiamo inserito NSLog() all'interno di loop. Por isso, torna-se necessário remover, de alguma forma, todas as linhas de NSLog() do nosso código, porque não é necessário, seja porque as chamadas para NSLog() poderia afetar o desempenho da nossa aplicação, principalmente se colocarmos NSLog() para 'loop interno.
Imediatamente descartar a solução para o "olhar" e "cancel" porque um dia não poderia ser utilizado novamente. Excluímos também a solução do "olhar" e "Comentários", desconfortável para a razão mesma de antes. Felizmente um ambiente limpo, simples e estão usando as condicionais de compilador corretas. O que fazemos na prática, e diz ao compilador para excluir - se houver uma condição específica - quando compilar as nossas linhas de origem que contêm NSLog() .
As compilações de directivas e instruções do compilador condicional, são um poderoso e generalizado. Aqueles que vem do desenvolvimento da ANSI-C certamente sabem muito bem e vai utilizzte em muitas situações. A peculiaridade dessas "instruções" reside no fato de, acima mencionado, para ser visto pelo compilador e não executável. Esta característica torna útil em muitos casos e podem resolver os problemas de outra maneira muito irritante.
Vamos ver um exemplo de código que, como previsto, você pode "apagar" por compilar pedaços de código, no nosso caso NSLog() :
1 2 3 4 5 6
| # Define ACTIVE_NSLOG 1 / / Se a constante é definida ACTIVE_NSLOG preencher / Bloco / de código entre # ifdef e # endif # Ifdef ACTIVE_NSLOG " ... bla bla" ) ; NSLog (@ "... blah blah"); # Endif |
). Declarações condicionais são parte do compilador da mesma família como #define , também, na verdade, são precedidos por um "quilo" ( # ). solo se ACTIVE_NSLOG è definito. No exemplo mostrado, nós definimos uma constante ACTIVE_NSLOG ; linhas subseqüentes do código diz ao compilador para "incluir" linha NSLog() somente se ACTIVE_NSLOG está definido. Se teve o cuidado, durante a escrita do nosso código, inserindo chamadas para NSLog() dentro do bloco #ifdef ... #endif per far sparire, alla prossima compilazione, tutti i nostri NSLog() . #ifdef ... #endif , basta apagar a definição da constante ACTIVE_NSLOG a desaparecer, a compilação seguinte, toda a nossa NSLog() .
A melhor e final
Vamos agora ver como definir o ambiente XCode para melhorar ainda mais o que fizemos aqui! Primeiro vamos escolher um nome constante que usamos em nossos projetos para excluir da compilação NSLog() . o quello che preferite. Você pode escolher o nome que quiser, de DEBUG para MIO_DEBUG ou o que você preferir. Abra o seu projeto, novo ou velho. Coloque tudo NSLog() dentro do bloco (ou blocos):
1 2 3
| # Ifdef MIO_DEBUG " ... bla bla" ) ; NSLog (@ "... blah blah"); # Endif |
Selecione o arquivo principal do seu projeto, clique direito e escolha o Get Info.

Isso abre uma janela com informações sobre o projeto:

Selecione a guia Build, verifique se você está em configuração de depuração (esta é a jóia), vá até a seção definida pelo usuário e adicionar, por meio do botão no canto inferior esquerdo, um novo campo chamado OTHER_CFLAGS . Neste assegnamoli o valor -DMIO_DEBUG=1 . A sintaxe é -D{mia define}=1 .
Este procedimento tem duas vantagens:
- Não devemos colocar o código
#define MIO_DEBUG 1 , mas fazê-lo através das informações do projeto. Então, quando vamos para preencher a versão de lançamento (aquele sem o NSLog() ) devemos nos lembrar de apagar a linha #define MIO_DEBUG 1 - A constante é definido em relação à configuração, no nosso caso de depuração. Em seguida, passando para a configuração de lançamento (release) estará ausente e as linhas constantes com
NSLog() não serão compilados
Conclusões
O procedimento acima pode ser útil em alguns casos moltidutine outros, com NSLog() , não têm nada a ver. Declarações condicionais pode ajudar o compilador em uma ampla variedade de contextos. Eles são freqüentemente usados por programadores para determinar o tipo de versão do sistema operacional, o alvo, a presença de processadores matemáticos, mantendo a mesma fonte "idêntico".
Para entender isso, como exemplo, podemos utilizzre nossa constante MIO_DEBUG também a intervir em outras áreas do código:
1 2 3 4 5 6 7 8 9 10
| / Debug / se ganhar o jogo / / Com uma pontuação de 100 em vez de 10000 :) # Ifdef MIO_DEBUG score == 100 ) if (score == 100) # Else score == 10000 ) if (score == 10000) # Endif { ; [HaiVinto auto]; } |
Para terminar, aqui estão alguns exemplos e suas variantes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| / / Em geral, há um # Se a expressão / / Se instrução semelhante à tradicional, portanto, com uma expressão plena
/ / Verificar se uma constante é definida # Ifdef constante
/ / Ver se ele não é uma constante definida # Ifndef constante
/ / Else # Else
/ Fecho / do bloco # Endif |
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| / / Por exemplo ... # Define DEBUG 1 # Define MIA_ALTRA_COSTANTE 5
... # Se DEBUG / / Preencha este # Else / / Caso contrário, preencha este outro # Endif
# Se MIA_ALTRA_COSTANTE> 4 "..." ) ; NSLog (@ "..."); # Endif |
1 2 3 4
| # Ifndef INCLUDE_MIO_FILE # Define INCLUDE_MIO_FILE # Include "mio_file.h" # Endif |
Leia mais ...
A primeira fonte que eu fui em suas mãos foi escrito em Basic e consistia de algumas linhas de código, para iluminar-me. Era um jogo simples que gerou um número aleatório de 1 a 10 e, através da entrada de teclado, provou que o número digitado foi Maggione, inferior ou igual ao número aleatório. Apesar de sua simplicidade rude continua a ser, para mim, um dos melhores exemplos - simples, divertido e prático - para explicar a quem não sei nada sobre programação que se entende realmente de "programa de computador". Então eu decidi propor-lo para o iPhone da Apple, talvez ajude alguém ...
Leia mais ...
Com algumas linguagens de alto nível, tais como JavaScript ou PHP, onde os dados não são digitados ou de outra forma não pode ser, nós somos "mimado" em comparar ou converter strings e inteiros e vice-versa, tudo escondido ou manipulado pelo interpretador (ou compilador ). Por exemplo em JavaScript funções são "forçadas" (como parseInt() , por exemplo) exigido em casos especiais. No entanto, em outras circunstâncias, tratar os inteiros sem preocupação de conversões particulares (explícito), tais como:
1 2 3
| 5 ; mioNumero var = 5; / / ... "Il valore di mioNumero è " + mioNumero ) ; alert ("O valor é mioNumero" mioNumero +); |
Objectivo-C, no entanto, o tipo de dados é importante ea conversão de tipo deve ser expresso. Além do elenco (melhor typecasting) podemos utilizar os recursos e funcionalidades específicas para a conversão de tipo. Por exemplo, aqui é como converter um inteiro para uma string:
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 =% s", myString, mioNumero); |
Em contraste, aqui é como converter uma string para um inteiro:
1 2 3 4
| miaStringa = @ "128" ; NSString * myString = @ "128"; [ miaStringa integerValue ] ; mioNumero int = [myString integerValue]; / / "miaStringa=%@ mioNumero=%i" , miaStringa, mioNumero ) ; NSLog (@ "% @ myString = mioNumero =% s", myString, mioNumero); |
Leia mais ...
A classe UIAletrView permite que você exiba uma janela modal (animada) para informar e / ou pedir-lhe algo. O UIAlterView (alertas de vista) são muito confortáveis e fáceis de usar. A manipulação da resposta de utilizador é resolvido por interceptar o índice do botão pressionado. Para ver uma simples UIAlterView basta escrever:
1 2 3 4
| / / Alerta com um simples botão, sem retorno [ [ UIAlertView alloc ] initWithTitle : @ "Titolo" message : @ "Messaggio" cancelButtonTitle : @ "Annulla" otherButtonTitles : nil ] ; UIAlertView MyALERT * = [[UIAlertView alloc] initWithTitle: @ "Título" mensagem: @ "Mensagem" cancelButtonTitle: @ "Cancelar" otherButtonTitles: nil]; ; [MyALERT show]; ; [MyALERT release]; |
E 'possível adicionar botões adicionais otherButtonTitles :
1 2 3 4
| / Alerta / com dois botões simples, sem retorno [ [ UIAlertView UIAlertView MyALERT * = [[UIAlertView ; [MyALERT show]; ; [MyALERT release]; |
: Para determinar qual botão foi pressionado, basta adicionar o delegate:self objeto de inicialização UIAlterView :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Alerta / / simples com dois botões e callbacks [ [ UIAlertView alloc ] initWithTitle : @ "Titolo" message : @ "Messaggio" delegate : self cancelButtonTitle : @ "Annulla" otherButtonTitles : @ "Ok" , nil ] ; UIAlertView MyALERT * = [[UIAlertView alloc] initWithTitle: @ "Título" mensagem: @ "Mensagem" delegado: cancelButtonTitle self: @ "Cancelar" otherButtonTitles: @ "Ok", nil]; ; [MyALERT show]; ; [MyALERT release];
/ / O retorno de chamada tem a seguinte sintaxe
void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) clickedButtonAtIndex alertView: (NSInteger) {buttonIndex buttonIndex ) { interruptores (buttonIndex) { : case 1: / / Código quebrar; } } |
O retorno de chamada alertView precisa ter esse nome, para mais informações, consulte UIAlertViewDelegate
punteranno sempre a quella. Com apenas o callbck alertView:clickedButtonAtIndex mais UIAletrView irá sempre apontar para isso. Usando o campo de tag do objeto UIAletrView , podemos determinar o que o "chamador":
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Alerta / / simples com dois botões e callbacks [ [ UIAlertView alloc ] initWithTitle : @ "Titolo" message : @ "Messaggio" delegate : self cancelButtonTitle : @ "Annulla" otherButtonTitles : @ "Ok" , nil ] ; UIAlertView MyALERT * = [[UIAlertView alloc] initWithTitle: @ "Título" mensagem: @ "Mensagem" delegado: cancelButtonTitle self: @ "Cancelar" otherButtonTitles: @ "Ok", nil]; ; myAlertA.tag = 1; ; [MyAlertA show]; ; [MyAlertA release];
/ / [ [ UIAlertView alloc ] initWithTitle : @ "Titolo" message : @ "Messaggio" delegate : self cancelButtonTitle : @ "Annulla" otherButtonTitles : @ "Ok" , nil ] ; UIAlertView myAlertB * = [[UIAlertView alloc] initWithTitle: @ "Título" mensagem: @ "Mensagem" delegado: cancelButtonTitle self: @ "Cancelar" otherButtonTitles: @ "Ok", nil]; ; myAlertA.tag = 2; ; [MyAlertB show]; ; [MyAlertB release];
/ / A gestão múltipla UIAlertView
void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) clickedButtonAtIndex alertView: (NSInteger) {buttonIndex "Alert Tag: %i" , alertView.tag ) ; NSLog (@ "Etiquetas de Alerta:% s", alertView.tag); "buttonIndex: %i" , buttonIndex ) ; NSLog (@ "buttonIndex:% s", buttonIndex); } |
Leia mais ...
A sintaxe com colchetes em Objective-C é uma das razões mais frustração para quem vem de outras línguas (para objetos). No entanto, se acostuma, você percebe o quão legível o código torna-se demasiado com esta mistura de sintaxe clássica e do Smalltalk mais distintamente. Por exemplo, vemos como o mesmo procedimento pode ser escrita tanto na sintaxe. Tome a inicialização de um UIAlertView :
1 2 3 4 5 6 7 8
| [ [ UIAlertView alloc ] initWithTitle : @ "Titolo" UIAlertView MyALERT * = [[UIAlertView alloc] initWithTitle: @ "Título" "Messaggio" mensagem: @ "Mensagem" delegado: auto "Annulla" cancelButtonTitle: @ "Cancelar" "Ok" , nil ] ; otherButtonTitles: @ "Ok", nil]; ; myAlert.tag = 1; ; [MyALERT show]; ; [MyALERT release]; |
Definir o potavamo tag mesmo assim:
1 2 3 4 5 6 7 8
| [ [ UIAlertView alloc ] initWithTitle : @ "Titolo" UIAlertView MyALERT * = [[UIAlertView alloc] initWithTitle: @ "Título" "Messaggio" mensagem: @ "Mensagem" delegado: auto "Annulla" cancelButtonTitle: @ "Cancelar" "Ok" , nil ] ; otherButtonTitles: @ "Ok", nil]; 1 ] ; [MyALERT AJUSTES: 1]; ; [MyALERT show]; ; [MyALERT release]; |
Mesma coisa na leitura durante o 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) {/ / ... / / Ou alertView tag ] == 1 ) { // ... if ([alertView tag] == 1) {/ / ... } |
Nota: Nem todas as propriedades ou métodos tem esta sintaxe dupla. No caso de ' UIAlertView temos essa dupla característica. Para outros objetos, ou em outros casos, entretanto, pode funcionar apenas um dos dois ... mas não me pergunte por que (dependendo de como os desenvolvedores têm definido a interface).
Leia mais ...
, usata per il debug delle applicazioni. Assumir o cargo de ActionScript para Objective-C (onde você colocou o código e comparando a sintaxe do ActionScript e Objective-C) em Actionscript temos a conveniente função trace ( ) , usado para aplicações de depuração. Esta função gera uma saída para o ambiente de desenvolvimento consola Adobe Flash. É usado principalmente durante o desenvolvimento e teste de "filme" / aplicação. No C-Objetivo XCode / temos: NSLog ( ) . di Actionscript: A sintaxe desta função é muito semelhante ao trace ( ) em Actionscript:
1
| "Sono una linea di debug" ) ; NSLog (@ "Eu sou uma linha de depuração"); |
Em Actionscript temos:
1
| "Sono una linea di debug" ) ; trace ("Eu sou uma linha de depuração"); |
Além do uso de arroba (@), como você pode ver, são idênticos. As diferenças (e semelhanças) começam quando você deseja exibir valores de variáveis, por exemplo, em Actionscript temos:
1 2 3
| "Coordinata x:" + x + " coordinata y:" + y ) ; trace ("coordenada x:" + x + "coordenada y:" + y); / / Ou "Coordinate: " , x , y ) ; trace ("coordenadas", x, y); |
Em Objective-C, temos:
1
| "Coordinata x:%i coordinata y:%i" , x, y ) ; NSLog (@ "x-coordenadas: a y%% coordenadas i", x, y); |
che opera sull'Apple System Log. Nota: NSLog() realmente chama a função mais genérica NSLogv ( ) que trabalha na Apple Registro do sistema. As funções são, de facto idênticos, alterando apenas os parâmetros de entrada.
o sprintf ( ) . Desenvolvedores de C vai encontrar muito familiarizado com a formatação de strings, como com printf ( ) ou sprintf ( ) . Para mais detalhes, ver especificadores de formato de String .
Leia mais ...
O uso de temporizadores ( NSTimer ) para desenvolver aplicativos para o iPhone da Apple é muito freqüente, não só em fazer jogos. Um dos problemas com que se pode colidir é a assincronia do timer, que pode levar, durante a prisão de um ou mais temporizadores, a queda de nossa aplicação. , si invoca la invalidate che, appunto, arresta il timer. Quando você quiser parar um ou mais temporizadores, onde repeats é definido como YES , você chama o invalidate que, de fato, parar o cronómetro.
Leia mais ...
Últimos Comentários
kOoLiNuS : @ Giovambattista Fazioli: obrigado! mais do que dispostos!
Giovambattista Fazioli : @ kOoLiNuS: Calmo, provavelmente você pode antecipar que WPX Cleanfix será livre, e ...
kOoLiNuS : @ kOoLiNuS: a falta
e uma 
kOoLiNuS : @ Giovambattista Fazioli: Assinei, mas quando eu era o meu uso amador da plataforma ...
Giovambattista Fazioli : @ kOoLiNuS: Sim, este é um problema conhecido. Ocorre quando as tabelas em questão são ...