Piccolo snippet di codice per identificare la risoluzione in iPhone e iPad da codice.

Useremo tre oggetti: CGRect, CGFloat e CGSize.

Tutto ciò insieme a UIScreen, di sicuro l'elemento più importante dello snippet.

L'esigenza nasce dal datto che nella schermata di registrazione che sto facendo per una app per iPad, devo permettere solo numeri.

Questo perchè il campo corrisponde a quello del numero di telefono.

Per farlo è necessario usare il metodo shouldChangeCharactersInRange; ma andiamo con ordine e partiamo dal file .h:

#import <UIKit/UIKit.h>

@interface ControllerPrivateReg : UIViewController <UITextFieldDelegate>

@property (strong, nonatomic) IBOutlet UITextField *txtTelephone;

@end

Dobbiamo implementare il protocollo UITextFieldDelegate, per il resto non ci serve altro che il riferimento alla nostra UITextField.

In questi giorni mi sono dato alla validazione di un form per una app su iPad.

I controlli erano più o meno i soliti: password, email, codice fiscale, ecc....

Per eseguire questi controlli mi sono creato una classe con dei metodi static da richiamare nel form.

Vi posto uno di questi metodi per vedere come usare le espressioni regolari in Objective-C.

Oggi vediamo come effettuare richieste POST a un file remoto e leggere la risposta con Objective-C (testao su iPhone e iPad).

E' un argomento di assoluta importanza nel mondo mobile, in quanto in molte app è richiesta l'interazione con un database.

Quindi il primo passo è creare dei file su server nel linguaggio che preferite (ad esempio PHP); nel mio caso specifico ho creato un file che mi serve per interogare il db e vedere se l'utente è registrato (lascio a voi la creazione del file lato server).

Nel file .h avremo una cosa del genere:

#import

@interface ControllerLogin : UIViewController {
    NSURLConnection *connection;
    NSMutableURLRequest *request;
    NSURL *url;
    NSMutableData *dataResponse;
    NSMutableString *strResponse;
}

@property (strong, nonatomic) IBOutlet UIButton *btnLogin;
@property (strong, nonatomic) IBOutlet UITextField *txtUser;
@property (strong, nonatomic) IBOutlet UITextField *txtPwd;

- (IBAction)doLogin:(id)sender;

@end

Il metodo doLogin si occuperà di iniziare tutto il processo.

Poi abbiamo diversi tipi di variabili da usare.

Vi posto il file di implementazione a pezzi, mettendo solo ciò che ci interessa.

Abbiamo visto come riempire le UIPickerView usando sia un NSArray sia usando un NSDictionary.

Abbiamo anche visto che leggere un file di testo.

A questo punto mettiamo tutto insieme: da un file di testo riempiamo l'NSDictionary che viene usato dal nostro UIPickerView.

Il file di testo sarà una cosa del genere:

s.c.c. a r.l.;Società Cooperativa Consortile a responsabilità limitata
S.p.A.;Società per Azioni
N.A.;National Association
Cons. a.e.;Consorzio con attività esterna
Cons.;Consorzio
S.c.r.l.;Società Cooperativa responsabilità limitata
soc. consort. n c.;Società Consortile in nome collettivo
coop. soc.;Cooperativa sociale
p. soc. coop.;Piccola Società Cooperativa
s.r.l. unico socio;Società a responsabilità limitata con unico socio
soc. coop. agricola;Società Cooperativa Agricola
S.p.A. Socio Unico;Società per Azioni con Socio Unico
s.r.l. unipersonale;Società unipersonale a responsabilità limitata
L.L.C.;Limited Liability Company
s.a.s.;Società in accomandita semplice
soc. coop. p.A. r.l.;Società cooperativa per Azioni a responsabilità limitata
Soc. Mutua Ass.;Società di Mutua Assicurazione
Cons. a gar. l.;Consorzio a garanzia limitata
Ente Morale;Ente Morale
GmbH;Geselschaft mit Beschränkter Haftung

In pratica ogni riga la spezziamo al punto e virgola e la parte di sinstra sarà la chiave, mentre quella di stra il valore visto sullo schermo.

Prima di tutto aggiungete il file al progetto.

Poi questo sarà il file .h:

#import <UIKit/UIKit.h>

@interface ControllerAziendaReg : UIViewController {    
    NSMutableDictionary *dictionaryForma;
    NSArray *splitArray;
    NSMutableArray *keysForma;
    NSMutableArray *objectsForma;
    NSString *fileTxt;
    NSString *textFromFile;
    UIActionSheet *sheetForma;
}

@property (retain, nonatomic) IBOutlet UIPickerView *pickerForma;

@end

Il file .m ve lo spezzo in modo da rendere più chiaro il tutto.

Può capitare spesso di dover prendere dei dati da un file di testo nelle nostre app per iPhone/iPad.

Farlo in verità è molto semplice.

Aggiungete un file di testo al vostro progetto (file.txt ad esempio) e scriveteci qualcosa dentro.

Poi andate nel file .h del vostro controller:

#import <UIKit/UIKit.h>

@interface MyController: UIViewController {   
    NSString *fileTxt;
    NSString *textFromFile;
}

@end

Due semplici NSString.

Nel precedente articolo su Obj-C avevo analizzato come usare le UIPickerView.

In quel caso abbiamo usato un semplice NSArray.

Non che sia sbagliato, ma nel caso specifico ho la necessità di rendere il componente più simile a una <select> HTML, dove il valore reale non è uguale a quello visualizzato.

Per ottenere questo comportamento dobbiamo impostare come sorgente dati non un NSArray, ma un NSDictionary.

Quindi nel file .h:

#import <UIKit/UIKit.h>

@interface ControllerAziendaReg : UIViewController {    
    NSDictionary *dictionaryForma;
    NSArray *keysForma;
    NSArray *objectsForma;
    UIActionSheet *sheetForma;
}

@property (retain, nonatomic) IBOutlet UIPickerView *pickerForma;

@end

Un oggetto di tipo NSDictionary è composto di due parti: una chiave alla quale corrisponde un valore.

Queste due componenti le comporremo attrverso due NSArray.

L'oggetto UIPickerView viene usato per rappresentare dei valori tra i quali scegliere; un pò come i menu a tendina nei siti web per intenderci.

Solo che non basta trascinare un oggetto nello Storyboard o nel .xib per usarlo.

Siamo noi che dobbiamo impostarlo.

Prima di tutto trasciniamo un componente UIPickerView nello Storyboard.

Impostiamo tutte le proprietà che ci interessano (colore, carattere, ecc....) e infine agganciamolo al controller attraverso Interface Builder.

Questo sarà l'header del controller:

#import <UIKit/UIKit.h>

@interface ControllerAziendaReg : UIViewController {
    NSMutableArray *arrForma;
}

@property (retain, nonatomic) IBOutlet UIPickerView *pickerForma;

@end

L'oggetto NSMutableArray ci servrà per riempire il picker.

Quando si crea un sistema di registrazione e login, con qualsiasi linguaggio si tratti, è sempre bene salvare l'hash della password, e non la password in chiaro.

Oggi vediamo come calcolare l'hsh MD5 di una NSString in Objective-C.

L'SDK per iPhone e iPad già dispone gli strumenti adatti per usare MD5.

Bisogna solo attivarli.

Create una classe apposita; la mi si chiama StrMD5.

L'interfaccia sarà così:

#import <Foundation/Foundation.h>

@interface NSString (StrMD5)

- (NSString*) MD5;

@end

Come vedete l'interfaccia è dichiarata come estensione di NSString.

Nelle ultime versioni dell'SDK la Apple ha introdotto ARC (Autmotic Reference Counting).

In parole povere aiuta i programmatori a gestire meglio e in maniera automatica la memoria.

Non è possibile definirlo un meccanismo di Garbage Collector ma ci si avvicina.

Tralasciando i particolari, può capitare di dover disabilitare ARC solo per alcuni files.

Nel mio caso specifico devo usare la classe Reachability per testare la connessione internet su un iPad.

Questa classe, messa a disposizione da Apple stessa, richiede che ARC sia disabilitato.