Objective-C

La Apple attaccata al passato

Mattepuffo's logo
Risoluzione iPhone e iPad con Objective-C

Risoluzione iPhone e iPad con Objective-C

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.

Mattepuffo's logo
Permettere solo numeri in UITextField

Permettere solo numeri in UITextField

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.

Mattepuffo's logo
Usare le espressioni regolari in Objective-C

Usare le espressioni regolari in Objective-C

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.

Mattepuffo's logo
Inviare richieste POST in Objective-C

Inviare richieste POST 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.

Mattepuffo's logo
Riempire UIPickerView da file di testo

Riempire UIPickerView da file di testo

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.

Mattepuffo's logo
Leggere file di testo in Objective-C

Leggere file di testo in Objective-C

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.

Mattepuffo's logo
UIPickerView da NSDictionary

UIPickerView da NSDictionary

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.

Mattepuffo's logo
Usare UIPickerView in iPhone e iPad

Usare UIPickerView in iPhone e iPad

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.

Mattepuffo's logo
Creare un hash MD5 da una NSString

Creare un hash MD5 da una NSString

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.

Mattepuffo's logo
Objective-C: disabilitare ARC per alcuni files

Objective-C: disabilitare ARC per alcuni files

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.