de funcionários e salvar a empresa em si. Como visto na figura 3.1 a tela contêm
dois componentes que devem trabalhar em conjunto para alterar a quantidade de
funcionarios: um campo de texto (UITextField) e um incrementador (UIStepper). O
que queremos que aconteça é que quando o usuário tocar em algum dos botões, o
valor correspondente apareça no UITextField ao lado.
No arquivo
ViewController.h criamos uma
IBAction chamada
incrementadorAlterado:, que é o método a implementar. Abra o arquivo
ViewController.m e faça o seguinte:
1 - (IBAction)incrementadorAlterado:(id)sender {
2
UIStepper *incrementador = (UIStepper *)sender;
3
self.quantidadeField.text = [NSString stringWithFormat:@"%d",
4
(int)incrementador.value];
5 }
O método incrementadorAlterado: segue um padrão bastante comum em
Objective-C, que é o de receber um argumento do tipo id chamado sender quando
for associado a algum evento. No caso, id pode ser lido como qualquer coisa, e
sender (remetente, quem enviou) é apenas o nome da variável você pode
modificar para o que achar mais apropriado, apesar de este ser o nome utilizado
em toda documentação. Levando isso em consideração, na linha 2 convertemos
sender para o tipo UIStepper, pois sabemos que este método será chamado ape-
nas quando o UIStepper da tela for modificado. Já nas linhas 3 e 4 convertemos
para string o valor numérico do componente existente na propriedade value, pois
o UITextField não aceita números diretamente.
Rode o aplicativo através do atalho Command + R ou através do menu Product
-> Run e clique nos botões - e +, para ver o campo de texto receber os valores.
38
Casa do Código
Capítulo 3. Mais Objective-C e Xcode
3.10
Trabalhe com objetos: instanciando uma Em-
presa
Para criar uma nova
empresa precisamos de instâncias da classe Empresa e preen-
cher as propriedades nome e quantidadeFuncionarios. Isso será feito na ação
do botão Salvar, conforme mostrando no código abaixo:
1 - (IBAction)salvar:(id)sender {
2
Empresa *e = [[Empresa alloc] init];
3
e.nome = self.nomeField.text;
4
e.quantidadeFuncionarios = [self.quantidadeField.text intValue];
5
6
NSLog(@"Empresa criada. Nome=%@, funcionários=%d",
7
e.nome, e.quantidadeFuncionarios);
8 }
Na linha 2 criamos uma nova instância da classe Empresa, enquanto que
nas linhas 3 e 4 preenchemos as propriedades com os valores dos componentes da
tela. Estas são aquelas mesmas variáveis com @property existentes no arquivo
Empresa.h. Nas linhas 6 e 7 escrevemos os valores no console para fins de debug-
ging.
Compile o projeto com o atalho
Command + B. Funcionou?
A menos
que você tenha importado o arquivo
Empresa.h logo no início do arquivo
ViewController.m, o Xcode deverá ter acusado erros de compilação informando
que a classe Empresa não existe. Para resolver este problema, adicione a linha
#import "Empresa.h" no topo do arquivo ViewController.m, recompile o
projeto e rode-o com Command + R.
O painel de debug e console do Xcode
Rode o aplicativo, insira o nome e quantidade de funcionários e clique no botão
salvar. O Xcode deverá mostrar automaticamente uma mensagem de log no painel
inferior (caso contrário, abra-o através do atalho Command + Shift + C, ou pelo
menu View -> Debug Area -> Activate Console), conforme a figura 3.10. Como você
já associou, a função NSLog serve para jogar informações no console do Xcode,
o que é útil em diversos momentos durante o ciclo de desenvolvimento e testes do
aplicativo.
39
3.11. Como são as strings em Objective-C?
Casa do Código
Figura 3.10: Localização do console de debug com saída do NSLog
3.11
Como são as strings em Objective-C?
Strings em Objective-C são representadas pela classe NSString, e seus valores de-
vem ser precedidos pelo caractere @ (arroba). Isso é necessário para se distinguir do
array de caracteres da linguagem C (tecnicamente, instruções como char *), na
qual Objective-C é fundamentada.
A forma correta de criar strings em Objective-C é mostrada abaixo:
// OK - utiliza '@'
NSString *nome = @"Rafael Steil";
40
Casa do Código
Capítulo 3. Mais Objective-C e Xcode
// ERRO - o código abaixo não irá funcionar
NSString *ops = "ObjC não funciona assim";
3.12
Formatando strings
É possível construir strings utilizando alguns caracteres especiais de formatação atra-
vés do método stringWithFormat:, conforme mostrado abaixo:
double faturamento = 1234.567;
NSString *mensagem = [NSString stringWithFormat:
@"A empresa %@ tem %d funcionários, e faturamento de R$ %f",
e.nome, e.quantidadeFuncionarios, faturamento];
A lista de formatadores é relativamente extensa, porém os mais comuns são:
%@ : para qualquer tipo de objeto, incluindo outras NSStrings
%d : números inteiros ( int e unsigned int)
%f : números de ponto flutuante ( float e double)
A função NSLog já aceita por definição esta mesma estrutura de formatação,
sem ser necessário a utilização de stringWithFormat:.
3.13
Guardando todas empresas em memória
O código que fizemos até agora cria a empresa, mas não a armazena em nenhum