Steil Rafael - iOS: Programe para iPhone e iPad стр 12.

Шрифт
Фон

lugar, porém nós queremos manter uma relação de todos os registros que foram in-

seridos e mostrar no console a relação completa a cada nova empresa. Existe uma

infinidade de maneiras de realizar esta tarefa, e para o propósito deste capítulo

que é apresentar em maiores detalhes o Xcode e a linguagem Objective-C vamos

nos concentrar em algo simples e prático, como uma lista em memória, utilizando a

classe NSArray.

NSArray versus array

Apesar de conter a palavra array no nome, tecnicamente a classe

NSArray não é um array no conceito formal da linguagem,

mas sim se

equivale muito mais a uma lista, algo como a classe ArrayList de Java

e C#.

41

3.13. Guardando todas empresas em memória

Casa do Código

A primeira coisa a fazer é ir para o arquivo ViewController.h (tecla de ata-

lho CTRL + Command + Seta para cima) e declarar uma variável chamada

catalogo do tipo NSMutableArray, conforme exemplificado abaixo:

1 # import <UIKit / UIKit.h>

2

3 @interface ViewController : UIViewController { // Abre chave aqui

4

NSMutableArray *catalogo;

5 } // Fecha chave aqui

6

7 // Este código abaixo já havia sido feito anteriormente

8 @property (weak, nonatomic) IBOutlet UITextField *nomeField;

9 @property (weak, nonatomic) IBOutlet UITextField *quantidadeField;

10 @property (weak, nonatomic) IBOutlet UILabel *avisoSucessoLabel;

11 - (IBAction)incrementadorAlterado:(id)sender;

12 - (IBAction)salvar:(id)sender;

13

14 @end

O código referente a esta seção é o da linha 4, lembrando que é necessário

adicioná-lo entre chaves (final da linha 3 e linha 5), como foi explicado anterior-

mente na seção da classe Empresa. Da linha 8 em diante é o código que criamos

anteriormente, e foi adicionado na listagem apenas para referência.

Voltando o arquivo ViewController.m (lembra da tecla de atalho?), vamos

criar o método para armazenar as empresas no objeto catalogo, e depois chamar o

método na ação do botão Salvar. Adicione o seguinte código logo antes do método

- (IBAction)salvar:(id)sender:

1 -(void) salvaEmpresa:(Empresa *) novaEmpresa {

2

if (!catalogo) {

3

catalogo = [[NSMutableArray alloc] init];

4

}

5

6

[catalogo addObject:novaEmpresa];

7 }

Na linha 6 adicionamos na lista o objeto novaEmpresa passado como argu-

mento ao método. Já as linhas 2 e 3 precisam de uma explicação mais detalhada: em

Objective-C objetos não-instanciados contêm por padrão o valor nil (que é um

primo próximo do NULL de Java, C# e do próprio C e C++). Além disso, na lingua-

gem os valores nil e 0 (zero) são tratados como falso em expressões condicionais,

42

Casa do Código

Capítulo 3. Mais Objective-C e Xcode

da mesma forma que qualquer coisa que não seja nil ou 0 é considerada como ver-

dadeiro em condicionais booleanas. Em outras palavras, os seguintes códigos são

equivalentes:

// OK

if (!catalogo) {

}

// OK - mesmo efeito do exemplo anterior

if (catalogo == nil) {

}

Por fim, na linha 3 criamos uma nova instância de fato do NSMutableArray

NSArray versus NSMutableArray - imutável e mutável

Algumas classes do SDK do iOS contêm versões imutáveis (que após

criadas não podem mais ser modificadas) e versões mutáveis (que po-

dem ser modificadas livremente), como é o caso do NSArray (imutá-

vel) e NSMutableArray (mutável). Saber quando usar uma versão ou

outra depende exclusivamente das necessidades de cada parte do código.

Outras classes imutáveis que têm versões mutáveis são NSDictionary,

NSSet, NSData e NSString.

3.14

Listando todas as empresas do catálogo

Aproveitando que estamos embalados, vamos criar também um outro método que

lista todas as empresas adicionadas ao catalogo. Adicione o seguinte código logo

após o método salvaEmpresa:

-(void) mostraCatalogo {

NSLog(@"******* Listando todas empresas *******");

for (Empresa *empresa in catalogo) {

NSLog(@"A empresa %@ tem %d funcionários",

empresa.nome, empresa.quantidadeFuncionarios);

}

}

43

3.15. Vença a sintaxe do Objective-C: invocação de métodos

Casa do Código

Modifique o método salvar: para remover a antiga chamada a NSLog, e in-

voque os dois novos métodos que criamos. Confira abaixo:

- (IBAction)salvar:(id)sender {

Empresa *e = [[Empresa alloc] init];

e.nome = self.nomeField.text;

e.quantidadeFuncionarios = [self.quantidadeField.text intValue];

[self salvaEmpresa:e];

[self mostraCatalogo];

}

Rode novamente o aplicativo no simulador através da tecla de atalho Command

+ R (ou pelo menu... você ainda lembra

qual é?) e insira algumas empresas, para ver

o resultado do aplicativo até o momento.

3.15

Vença a sintaxe do Objective-C: invocação de

métodos

A assinatura de métodos em Objective-C é algo bastante particular da linguagem, e

pode ser um pouco criptográfico numa primeira olhada. Uma das intenções dos cri-

adores da linguagem foi criar uma sintaxe declarativa e fácil de ler, que não deixasse

margem para dúvidas em relação ao que se refere cada valor passado ao método. Se

isso é algo bom ou ruim, cabe a você decidir.

Considere o seguinte código, retirado da classe NSMutableArray:

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке