Arquivo Junho de 2009


Trabalho em saidmade: Programador Procurado

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:

  • XHTML / CSS
  • WordPress

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 ...

Eclipse, Aptana: carregar arquivos usando o teclado

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 ..:

eclipseprefs

Rimuivere a "ligação", ou seja, a associação com o atalho de teclado, e vai trabalhar!

Leia mais ...

iPhone: todas as fontes do sistema

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):

iphonefonts

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 ...

Como remover NSLog () da origem 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> 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.

getinfo

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

userdefine

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:

  1. 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
  2. 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 ...

iPhone FirstApp: Adivinhe o número - Parte 1

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 ...

Objective-C: conversão de tipo

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 ...

trecho de código iPhone: UIAlertView

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 ...

iPhone Objective-C: equivalência na sintaxe

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 ...

Rastreamento Actionscript, Objective-C NSLog ()

, 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 ...

Muito curto truque: NSTimer parada

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 ...



Pare SOPA