
Olá pessoal. Vamos agora para a segunda parte sobre interação no iPhone. Vamos também iniciar agora com tutoriais em video para melhorar a dinâmica de aprendizagem. Vamos lá..
Bom, continuando a aula anterior vamos explicar aqui pra que serve a declaração @property.
Se você trabalha com o Objective-C 2.0, você provavelmente está familiarizado com a declaração @property, mas se não está, esta linha de código pode intimidar. Não tema: Propriedades no Objective-C são realmente simples. Deixe me pegar o rápido desvio, pois essa decoração vai ser usada constantemente nesse curso.
Propriedades no Objective-C
Antes da declaração @property ter sido somada no Objective-C, programadores tradicionalmente definiam pares de métodos para atribuir e recuperar valores de cada variável de uma estância de classe. Esses métodos são chamadas de acessors e mutators. (Ou se preferir, getters e setters) e podem se parecer com isso:
- (id) foo
{
return foo:
}
- (void) setFoo: (id) _foo
{
if (_foo != foo)
{
[_foo retain];
[foo release];
foo = _foo;
}
}
Sendo esta representação perfeitamente válida, a declaração @property permite que você diga adeus ao tedioso processo de criação de métodos acessors e mutators, se você quiser. O @property não trabalha sozinha, combinado com outra declaração no arquivo de implementação (@synthesize), que você deve ver em alguns instantes, dirão ao compilador para criar os métodos getter e setter em tempo de compilação. Você deve ter que declarar uma variável de instancia como foi feito aqui, mas você não precisa definir o accessor e o mutator.
Em nossa declaração, o @ property chamar alguns atributos opcionais, separado por parêntese. Este ponto define como os acessors e mutators serão criados pelo compilador. Os dois que você verá aqui serão usados quando definirmos as propriedades na aplicação do iPhone.
@property (retain, nonatomic) UILabel *statusText;
O primeiro dos atributos, retain, diz ao compilador para enviar uma mensagem retain para o objeto que está assinando a propriedade. Este irá deixar a variável de instância com um marcação para ser acessado diretamente da memória quando nós precisamos dele. Isto é necessário por causa do comportamento padrão (assign) que é concebido para ser usado com a coleção Garbage, um recurso do Objective-C que atualmente não está implementado no iPhoneOS. Como resultado, se você definir uma propriedade que é um objeto (como um inteiro), você deverá gerar um retain especifico no atributo opcional. Colocando um “@property (retain” ao declarar a propriedade para um int, float, o outro tipo de dado raw, você não precisará especificar nenhum atributo opcional.
O segundo dos nossos atributos opcionais, nonatomic, muda a forma que os métodos acessors e mutators são gerados. Sem ser muito técnico, apenas deixe-me dizer que, por padrão, esses métodos são criados com algum código adicional que auxilia quando estiver escrevendo programas multitarefas (que não é feito atualmente no iPhone). Este código adicional, embora pequeno, é desnecessário quando estiver declarando um ponteiro para um objeto de interface com usuário então nós declaramos nonatomic para salvar um pouco de ciclos do processador. Haverá vezes que você não vai querer especificar um nonatomic para uma propriedade. Como regra geral, você irá especificar esse atributo na maioria das vezes que estiver escrevendo aplicações iPhone.
Propriedades no Objetive-C tem outro recurso legal. Eles introduzem ao uso de notação de ponto para a linguagem. Tradicionalmente, para usar um método accessor, você deve enviar uma mensagem para o objeto, como esta:
myVar = [algumObjeto foo];
Esta abordagem irá trabalhar corretamente. Mas quando você definir uma propriedade, você também tem a opção de usar a notação de ponto, similar ao que é usado em Java, C++ e C#, desta forma:
myVar = algumObjeto.foo;
Essas duas representações são idênticas para compilador. Use aqui te deixar mais feliz . Notação de ponto também trabalha com mutator:
algumObjeto.foo = myVar;
É idêntico a:
[algumObjeto setFoo: myVar];
Somando Actions e Outlets para o arquivo implamatation
Depois de termos alterado nosso cabeçalho da classe controller, salve-o e de apenas um cliente no arquivo de classe de implementação, Button_FunViewController.m
Neste ponto acho melhor vermos o vídeo que fiz para termos um entendimento maior, OK?
Abaixo segue o código do arquivo button_FanViewController.m depois de alterado:
implementation button_FunViewController;
@synthesize statusText;
- ( IBAction ) buttonPressed: (id) sender
{
NSString *title = [sender titleForState:UIControlStateNormal];
NSString *newText = [[NSString alloc] initWithFormat: @”O botão %@ foi pressionado!”, title];
statusText.text = newText;
[newText release];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning]; // Releases the view if it doesn’t have a superview
// Release anything that’s not essential, such as cached data
}
- (void)dealloc {
[statusText release];
[super dealloc];
}
@end
Espero que tenham gostado. No próximo capítulo vamos fazer uma aplicação mais complexa. Explicarei também cada componente da Biblioteca gráfica do IB. Até lá…
Cara… Teu blog tá show. E com vídeos agora! Todo dia confiro por novas postagens. Gostaria de te agredecer. To aprendendo muito. Parabéns.
Por: André Pedroza em 11/05/2009
às 17:53
Obrigado André. Estou gostando muito também de escrever para este blog. Tornou-se um Hobby e tanto… Espero estar ajudando.
Por: webclaudio em 13/05/2009
às 01:46
Pearl Jam de fundo ficou show…rsrs
Parabens pelo tutorial!!
Por: Marcelo Mattioli em 11/05/2009
às 18:21
Marcelo, desculpe não ter te respondido de imediato, não tinha entendido o que você queria. Aquela imagem peguei no google apenas para ilustrar. Aquela chamada que você viu era para um arquivo css comum que tinha a palavra flex no meio do nome. O Flex(verdadeiro) é como se fosse um servidor IIS, só que devolve arquivos FLASH com extensão .SWF em vez de html. Sendo assim, o iphone (por enquanto) não seria capaz de lê-lo (O iPhone não lê arquivos SWF). Se ainda tiver dúvida me escreva novamente.
Abraços.
Por: webclaudio em 13/05/2009
às 01:58
Concordo plenamente, pearl jam de fundo SHOW e os videos show tb
Por: Micael Estrázulas em 08/10/2009
às 20:40
boas,parabéns pelo o teu trabalho que já estava espetacular agora com videos então…BRUTAL…
Obrigado pela ajuda,um abraço e até ao próximo capítulo
Por: Eduardo Lopes em 12/05/2009
às 22:05
Obrigado Eduardo. Agradeço a força. Em breve, quando estivermos mais aprofundados no assunto, poderemos criar um fórum para trocar informações. Abraços.
Por: webclaudio em 13/05/2009
às 02:02
arrebentou ! não tem como vc me enviar os vídeos ? ltsiciliano@gmail.com
abs
Por: leandro em 13/05/2009
às 00:17
Valeu leandro. Cara até dá. Mas cada video está + ou – com 100 Megas. Derrepente vou fazer upload no rapidshare e postar o link.
Abraços.
Por: webclaudio em 13/05/2009
às 02:05
isso ! manda pro rapidshare, me ajudaria pacas pq coloco no iPod
abs
Por: leandro em 14/05/2009
às 03:08
Olá Pessoal, Tudo certo ?
Bom, parabens “webClaudio” pela iniciativa de publicar esse ótimo conteudo no blog.
Eu tenho algumas dúvidas sobre como pegar o valor de um campo text da tela, (que é uma string), converter ele para um int e somar um valor.
Bom, eu tentei de várias formas mais ainda não consegui. Alguem poderia me dar umas dicas para resolver meu problema ?
. Dai não precisaria criar uma variavel pra ficar convertendo em valor numerico.
Se possivel tb gostaria de fazer a conversão sem precisar usar duas linhas
Obrigado
Abraço
Arthur Lopes
Por: Arthur Lopes em 14/05/2009
às 00:37
Fala Arthur. Como a mensagem que você enviou informa, você tem que fazer um Cast, ou seja, transformar o objeto que você está usando para um mais básico. Abaixo, dou um exemplo de como converter uma string de um TextFild para inteiro e depois jogar em um label como string novamente:
#import “TesteViewController.h”
@implementation TesteViewController
@synthesize texto; //TextFild
@synthesize resultado; //Label
- (IBAction) botaoPressionado:(id) sender
{
//Cast de string para inteiro
int numero = (int) texto.text;
// Conversão de inteiro para string e Inserindo no label.
resultado.text = [[NSString alloc] initWithFormat: @”%@”, numero];
}
Espero ter ajudado.
Por: webclaudio em 14/05/2009
às 04:12
Olá “webClaudio”, tudo certo ?
Cara, ajudou um monte sim. A conversão para tipos básicos como double deve ser igual também né.
Obrigado pela Ajuda.
Abraço
Arthur Lopes
Por: Arthur Lopes em 14/05/2009
às 13:30
Camarada, o video ta excelente! aliás o blog todo. Parabéns ! é um grande incentivo pra mim tb.. Abraços
Por: Marcelo Camargo em 17/05/2009
às 11:46
Fala Marcelão… Valeu pela força. Sucesso para você…
Por: webclaudio em 19/06/2009
às 01:25
Parabéns pela iniciativa. Entendo que você nos cede parte preciosa do tempo que possui, ao preparar essas excelentes aulas.
Seu blog é de altíssima qualidade. Muitas felicidades!
Victor jr.
Por: Victor em 20/05/2009
às 23:52
Valeu Victor… A minha intenção realmente é primar pela qualidade das informações prestadas. Não me considero um expert no assunto, por isso tento me basear em textos reconhecidamente funcionais que encontro pela internet e livros do gênero. É e o tempo por enquanto é meu maior problema.. ou solução. :Op Abraços.
Por: webclaudio em 19/06/2009
às 01:23
Quando e que vai ter a aula 11?? =x
tou esperando anciosamente por ela…
valeu ai e ta muito show mesmo essas materias.
Por: Flavio em 16/06/2009
às 12:08
Fala Flavio, pois é … estava em semana de provas e me enrolei todo. Por isso tive que dar um tempo nos posts. Mas neste final de semana eu vou colocar bastante coisa no ar OK? Abraços.
Por: webclaudio em 19/06/2009
às 01:16
Aew claudio….eu tou lendo aqui todos os artigos, tou no quinto agora, mais nao vejo a hora de saber o que vai ser na parte 11…^^
Mais uma curiosidade, temos sempre que salvar o arquivos de implementaion e interfaces e o mais com uma letra no final que é .h .m e outra que eu esqueci agora, mais vc pode me falar o pq dessas letras??da onde elas vem, se é a inicial de algum nome, obg..valeu.
Por: Flavio em 19/06/2009
às 12:06
Olá, gostaria de agracer pelo seu brilhante trabalho na confecção deste tutorial, muito me ajudou.
Por: Wellington Sales em 26/06/2009
às 02:42
Você está de parabéns!!!! O blog está show, muito bom mesmo. O conteúdo então, é fantástico. Estou esperando ansiosamente pelos próximos capítulos.
Por: Allan Schmitt em 23/07/2009
às 20:24
Não terminei de ler seus tutoriais só que pela data do ultimo post parece que você abandonou? Ta muito bom ler tudo aqui..
Pena que os videos não abrem no iPod e meu MAC PC não funciona audio
Por: Luís de Marchi em 03/12/2009
às 03:02
Muito bom mais uma vez! Parabéns meu caro!
Por: Thadeu em 03/02/2010
às 02:06
Grande Cláudio, parabéns pelos ensinamentos e pela força de vontade de repartir seu conhecimento de graça conosco, você é o cara. Queria aproveitar a oportunidade e te fazer uma pergunta: essas revistas eletrônicas para ipad, vi que são possíveis fazê-las no SDK, mas deve dar uma trabalheira danada não? ou tem algum template disponível? Ou você tem outra dica para isso? Desde já agradeço.
Por: Alexandre em 12/05/2010
às 23:31
Fala Alexandre. Bom, ha várias formas de se fazer isso. Você pode criar uma formatação própria do arquivo e fazer com que seu app interprete o arquivo com os efeitos que desejar (Isto te dá mais recursos e protege melhor o copyright da obra literária, porém é mais trabalhoso), ou você pode usar uma das bibliotecas já prontas do iPad para leituras de formatos conhecidos(Doc, PDF e etc.). Recomendo a segunda opção pois a facilidade de se apontar o documento e ele já aparecer no seu app é mais rápida e cômoda. De resto é criar uma interface agradável para a leitura e de fácil busca (com marcadores e outros utilidades). Abraços.
Por: webclaudio em 03/06/2010
às 19:35
Caro Professor, grato por essa iniciativa, sou um ( digamos ) dinossauro da área, desde os tempos de IBM ( assembler, cobol, fortran…etc) .já ouviu falar disso né? rsrs. Tenho trabalhado sempre com Windows, .NET , e depois de um primeiro contato com o iphone, resolvi conhecer um pouco desse mundo MAC. comprei um MacBook Pro e estou no momento do desbravamento, e bastante arrependido de não ter feito isso muito antes.
Quero te dar os parabens pelo trabalho, e agradecer muito pois é perfeito para quem quer entrar nesta área. Tenho uma dúvida, não costumo pedir arrego diante de qualquer probleminha, mas após dois dias de tentar e não conseguir, resolvi pedir ajuda. pelo que vejo de diferença , em minha máquina já tenho os sistemas IOS4 , e há alguma diferença entre vossa aula e o que se apresenta no OS4. Me parece que ele já cria vários itens a mais quando da geração do projeto no Xcode. Pois bem minha dúvida é a seguinte, NÃO condegui fazer aparecer os botões nem o Label no seu exemplo da parte 10 do seu curso. já gastei 2 dias tentando e nada. copiei seu código no lugar do código inicial gerado pelo xcode e também nada de aparecer os botões ESQUERDO e DIREITO e tambem o LABEL. tudo feito várias vezes. usando as vinculações do .xib, sempre revisando 3 a 4 vezes e nada. NÃO aparecem os objetos Botóes e label no simulador. Alguma dica..?
Por: Luiz Carmona em 12/12/2010
às 19:26
Ola gostaria de deixar um comentario e uma dica sobre uma nova ferramenta chamada FLIP PDF onde podemos com ela criar artigos, revistas, catalogos digitais de forma simples e eficiente. Quem quizer ver e testar a mesma basta acessar o site http://www.flipbuilder.com. Obrigado e abraços a todos
Por: Milton P. JR em 11/03/2011
às 14:03
Parabéns Cláudio, apesar de eu ter 58 anos entendi a tua bela aula.
Por: Geraldo em 17/03/2011
às 19:37
Amigo teus posts 10,11,12 tem videos, e onde estou estudando (em casa) to sem net, voce tem como me mandar estes videos via email ? sem querer abusar da sua bondade.
Obrigado
Moacir.
Por: Moacir em 27/04/2011
às 16:59
Meu email: moacir@blusistemas.com.br
Por: Moacir em 27/04/2011
às 16:59
Webclaudio, sou novo na programação para iPhone e estou aprendendo ainda. Encontrei problema para fazer o código deste tutorial funcionar. Aparece um aviso que ‘title’ não é usada. Na linha de baixo veio um erro de expressão esperada antes do ‘@’. Uso o xCode 3 ainda. Copiei e colei o código que você postou. Pode ser por causa da versão do xCode? Achei que pudesse ser pelas áspas, mas troquei e não resolveu. Pode me ajudar?
Por: Marcus em 03/06/2011
às 13:16
Excelente conteúdo Cláudio.
Por: Luiz Augusto em 23/08/2011
às 12:13
Primeiramente, bom dia e parabéns pelo seu trabalho! Estou pensando em fazer um gerenciador de downloads pada iPad entretanto não sei será é possível. Caso o arquivo esteja em um servidor o tipo (MegaUpload e HotFile) a aplicação ainda precisa mostrar o CAPTCHA para o usuário digitar o codigo…. Atualmente meu negocio é Java e Php e estou começando a estudar o desenvolvimento para iPhone e iPad… Se você puder me dá uma dica seria de grande ajuda…. É possível fazer algo assim para um iPhone/iPad??? Tem alguma biblioteca específica para fazer comunicação com servidor web??? Tem alguma biblioteca para manipular as páginas HTML geradas pelo servidor web???
Abraço.
Por: Alex em 19/11/2011
às 13:03