Publicado por: webclaudio | 11/05/2009

Curso de programação para IPHONE – Parte 10

PARTE 2 DO TÓPICO INTERAÇÃO

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?

Parte 1
Parte 2

Abaixo segue o código do arquivo button_FanViewController.m depois de alterado:

#import “button_FunViewController.h”@

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á…

Anúncios

Responses

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

    • Obrigado André. Estou gostando muito também de escrever para este blog. Tornou-se um Hobby e tanto… Espero estar ajudando.

  2. Pearl Jam de fundo ficou show…rsrs
    Parabens pelo tutorial!!

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

    • Concordo plenamente, pearl jam de fundo SHOW e os videos show tb

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

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

  4. arrebentou ! não tem como vc me enviar os vídeos ? ltsiciliano@gmail.com

    abs

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

      • isso ! manda pro rapidshare, me ajudaria pacas pq coloco no iPod

        abs

  5. 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 ?
    Se possivel tb gostaria de fazer a conversão sem precisar usar duas linhas :D. Dai não precisaria criar uma variavel pra ficar convertendo em valor numerico.

    Obrigado

    Abraço

    Arthur Lopes

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

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

  7. Camarada, o video ta excelente! aliás o blog todo. Parabéns ! é um grande incentivo pra mim tb.. Abraços

    • Fala Marcelão… Valeu pela força. Sucesso para você…

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

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

  9. Quando e que vai ter a aula 11?? =x

    tou esperando anciosamente por ela…

    valeu ai e ta muito show mesmo essas materias.

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

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

  11. Olá, gostaria de agracer pelo seu brilhante trabalho na confecção deste tutorial, muito me ajudou.

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

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

  14. Muito bom mais uma vez! Parabéns meu caro!

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

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

  16. O seu tutorial ficou muito bom! Porém, não estou conseguindo ver os videos: ja tentei no firefox, IE e safari.. acredito que os mesmos estão offline (mais de um ano de publicação já, né?)
    tem como dar uma republicada neles?
    abc

  17. […] 10ª Lição – Iteração com o utilizador (Parte 2) […]

  18. webclaudio, primeiro parabens, mas nao sei se e a versao, mas eu nao consigo dar um ”
    -(IBAction)buttonPressed:(id)sender” para executar ao menos um elemento do interface builder, sempre da erro expect “{” before ‘-‘ token , se puder ajudar valeu.

  19. Fala Claudio.. Sou novato por aqui e novato no estudo de objective-C, estou ainda estudando tudo isso… acho muito interessante!!!
    Pelos seus posts já vi que você fera nessa parada…

    Aprendi muito com as suas matérias, posts videos…

    Parabéns pela dedicação..

    abraços

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

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

  22. Parabéns Cláudio, apesar de eu ter 58 anos entendi a tua bela aula.

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

  24. Meu email: moacir@blusistemas.com.br

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

  26. Excelente conteúdo Cláudio.

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

  28. Gente, foi só eu quem não conseguiu ver as fontes nos nos videos? Aqui ta tudo borrado.. ja fiz de tudo, e não consigo enxergar nada. O vídeo ta um borrão. No mais, o tutorial é perfeito. Li ele todinho, pena que nas partes dos videos, fiquei frustrado.


Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Categorias

%d blogueiros gostam disto: