Objective-C

La Apple attaccata al passato

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.

Mattepuffo's logo
Direttive del compilatore in Objective-C

Direttive del compilatore in Objective-C

L'Objective-C è pieno zeppo di sorprese (anche se continuo a dire che la sua sintassi non mi piace granchè).

Vediamo oggi le direttive del compilaotore.

@class serve per dichiarare una classe senza usare l'istruzione import.

@class MyClass

@protocol @required @optional @end definisce la dichiarazione di un protocollo.

Le altre 3 direttive che seguono vengono usate per:

  • dichiarare metodi required
  • dichiara metodi opzionali
  • dichiara la fine del protocollo

@protocol MyProtocol

@interface @public @package @protected @private @property @end definisce l'inizio di una classe.

E' la direttiva che troverete di più.

Mattepuffo's logo
Impostare lo sfondo di una NSImage da url

Impostare lo sfondo di una NSImage da url

In questi giorni di vacanza ho ripreso un pò in mano l'Objective-C.

Non per iPhone o iPad, ma per un piccolo programmino per Mac (anche se poi le cose sono abbastanza intercambiabili).

Quello che vediamo è come impostare lo sfondo di una NSImage prendendo l'immagine dal web.

Quindi, alla vostra interfaccia aggiungete un oggetto NSImage e poi collegatelo:

// AppDelegate.h

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate> {
  IBOutlet NSImageCell *myImage;
}

@property (assign) IBOutlet NSWindow *window;

@end

Come vedete l'oggetto da linkare, per essere precisi, è NSImageCell.

Invece in Interface Builder dovete trascinare un oggetto Image Well (che poi creerà anche l'oggetto Image Cell al suo interno).

Mattepuffo's logo
Usare le UIWebView in iPhone e iPad

Usare le UIWebView in iPhone e iPad

Apriamo una nuova sezione dedicata al linguaggio nativo per i sistemi Apple: Objective-C.

Nello specifico vedremo come caricare una UIWbeView, componente che ci permette di visualizzare le pagine web su iPhone e iPad.

La guida si riferisce infatti ad entrambi i dispositivi.

Nel vostro progetto aggiungete un componente UIWebView e "collegatelo" a InterfaceBuilder.

Ad esempio questo è il mio FirstViewController.h:

#import <UIKit/UIKit.h>

@interface FirstViewController : UIViewController {
     IBOutlet UIWebView *wvCollection;
}

@property (nonatomic, retain) IBOutlet UIWebView *wv_collection;

@end

Adesso nell'implementazione andremo a usare due metodi:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [wvCollection loadRequest:[LoadUrl load:@"http://www.compagniaitaliana.it/beta/app/collection.php"]];
}

 

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [wvCollection loadRequest:[LoadUrl load:@"http://www.compagniaitaliana.it/beta/app/collection.php"]];
}

Il primo metodo viene caricato solo la prima volta che si accede al controller.

Se poi cambiamo view e ci ritorniamo vediamo che è rimasto come lo avevamo lasciato.

Se vogliamo che si ricarichi ogni volta dobbiamo implementare anche il secondo metodo.