Archivio luglio, 2010


Very short snippet: NSURL, varie ed eventuali

Restituisce il nome di un file a partire dall’oggetto NSURLRequest, permettendo di decidere se avere o meno la sue estensione:

Continua...

Saidmade restyling: tanti servizi in più

Dopo giorni di “stancante” lavoro, abbiamo finalmente rilasciato la nuova versione del sito “aziendale” saidmade.com! È stata dura, anche perchè inizialmente volevamo sistemare alcune cose ma poi – alla fine – per colpa della maniacale precisione che colpisce chi è diretto interessato, ci siamo ritrovati ad eseguire un vero e proprio remake dell’intero sito. Potrete trovare tutte le novità direttamente all’interno del nuovo blog! Lasciatemi solo elencarne alcune importanti novità, oltre al restyling grafico:

  • Riorganizzazione di tutti i contenuti
  • Possibilità di registrarsi (gratuitamente) al sito per accedere a bonus, download di anteprime e aree riservate
  • Registrazione alla Newsletter
  • Integrazione del Blog (bye bye labs)
  • ed altro ancora…
  • Continua...

Very short snippet: ottenere il numero di Post, Page e Attachment

Come molti di voi sanno bene, la tabella wp_posts di WordPress è utilizzata per memorizzare Post, Pagine e allegati. La tipologia dell’elemento memorizzato è determinata dal campo post_type. Con la select proposta qui sotto, è possibile “contare” singolarmente le varie tipologie di elementi memrizzate in wp_posts.

Continua...

Very short snippet: registrare un’immagine nel Photo Album

Semplice modo per salvare nell’album fotografico del dispositivo un’immagine presente all’interno della nostra applicazione (o caricata da remoto):

Continua...

NSURLConnection: esempio d’uso

NSURLConnection permette di eseguire una connessione cotrollata verso un server remoto. Per utilizzarlo basta:

1
2
3
4
5
6
7
8
9
10
11
// Gli oggetti sufficienti per eseguire una NSURLConnection
NSURLConnection *urlConnection;
NSMutableData *mutableData;

// ...

NSString *urlString = @"http://www.miodominio.com/documento.txt";

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString: urlString]];
// Il delegato risponderà agli stati della connessione
urlConnection = [[NSURLConnection alloc] initWithRequest: urlRequest delegate:self];

Ecco i metodi delegati per controllare lo stato della connessione:

[cc_objc]

Continua...

Very short snippet: Objective-C, Selector from NSString

Objective-C è un linguaggio meraviglioso che permette di fare cose incredibili. Uno degli aspetti più interessanti è la sua dinamicità nell’invocazione di metodi (messaggi). È possibile, infatti, ottenere l’indirizzo di un messaggio partendo da una stringa.

Continua...

Very short snippet: UIWebView, visualizzare PDF e file interni

L’oggetto UIWebView può essere utilizzato per la visualizzazione di numerosi file. Ad esempio è possibile utilizzarlo per visualizzare – oltre che a filmati QuickTime o YouTube – documenti PDF o file HTML inseriti all’interno del nostro codice.

Continua...

NSString

NSString è una classe potentissima, lasciatemi mostrare alcune delle proprietà più utilizzate:

printf()

1
2
// printf()
NSString *output = [NSString stringWithFormat:@"%@ / %@", @"primo", @"secondo"];

Eseguire lo split()

1
2
3
// split() / explode()
NSString *list = @"Norman, Stanley, Fletcher";
NSArray *listItems = [list componentsSeparatedByString:@", "];

Convertire da stringa a valore

1
2
3
// converting
NSString *doubleString = @"123";
double value = [doubleString doubleValue];

All’interno di una stringa

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// substring
NSString *searchString = @"age";
 
NSString *beginsTest = @"Agencies";
NSRange prefixRange = [beginsTest rangeOfString:searchString
    options:(NSAnchoredSearch | NSCaseInsensitiveSearch)];
 
// prefixRange = {0, 3}
 
NSString *endsTest = @"BRICOLAGE";
NSRange suffixRange = [endsTest rangeOfString:searchString
    options:(NSAnchoredSearch | NSCaseInsensitiveSearch | NSBackwardsSearch)];
 
// suffixRange = {6, 3}

Continua...

Very short snippet: comporre mail all’interno di un’applicazione iPhone, iPod o iPad

Per comporre email all’interno di una applicazione iPhone/iPod è sufficiente aggiungere il framework MessageUI. Nel nostro controller inserire l’inclusione del framework e adottare il protocolo MFMailComposeViewControllerDelegate:

Continua...

Objective-C: metodi di classe e auto alloc

Quando definiamo o utilizziamo metodi (messaggi) in ambiente Objective-C, ci troviamo spesso di fronte alla curiosa sintassi che si presenta con un simbolo - o + davanti al prototipo, tipo:

1
2
3
4
5
6
7
// Nella definizione
- (void)mioMessaggio;

// Ugualmente, nell'implementazione
- (void)mioMessaggio {
    // ...
}

Oppure:

1
2
3
4
5
6
7
// Nella definizione
+ (void)mioMessaggio;

// Ugualmente, nell'implementazione
+ (void)mioMessaggio {
    // ...
}

La differenza risiede nel fatto che i metodi definiti con il simbolo - sono metodi di instanza, legati quindi ad un oggetto. I metodi definiti con il simbolo + sono chiamati metodi di Classe, in quanto possono essere eseguiti senza allocare ed istanziare l’oggetto in questione.

NSString o UIView sono due classi, molto usate, che contengono svariati metodi di classe. I metodi di classe vengono utilizzati continuamente, come quando inizializziamo o allochiamo un qualsiasi oggetto:

1
UIView *myView = [UIView alloc];

Il metodo alloc è un esempio classico, presente in tutti gli oggetti e, come si evince dal codice, è un metodo di classe in quanto invocato prima dell’allocazione dell’oggetto vero e proprio.

I metodi di classe possono essere utili in moltissimi casi, in particolare quando creiamo un nostro oggetto e desideriamo allocarlo ed inizializzarlo in meno righe di codice possibile. Immaginiamo di dover collezionare in un array una serie di oggetti da noi definiti. Definiamo prima di tutto il nostro oggetto, scrivendo il codice nel modo più semplice, senza utilizzare metodi di classe:

1
2
3
4
5
6
7
8
9
10
// Definizion l'interfaccia in myObject.h
#import <Foundation/Foundation.h>

@interface myObject : NSObject {
    NSString *name;
    NSString *lastname;
}

@property(nonatomic, retain) NSString *name;
@property(nonatomic, retain) NSString *lastname;

L’implementazione, nel caso più semplice, potrebbe risultare nulla o:

1
2
3
4
5
6
7
8
9
10
11
12
// myObject.m

#import "myObject.h"
@implementation myObject

@synthesize name, lastname;

- (void)dealloc {
    [name release];
    [lastname release];
    [super dealloc];
}

Quando andremo ad usare il nostro oggetto, ci troveremo ad utilizzare un codice simile a questo:

1
2
3
myObject *obj = [myObject alloc];
obj.name      = @"Mario";
obj.lastname  = @"Rossi";

Se volessimo creare numerosi oggetti di questo tipo, e inserirli in un NSArray, la situazione diventa un poco imbarazzante:

1
2
3
4
5
6
7
8
9
10
11
12
myObject *objA = [myObject alloc];
objA.name      = @"Mario";
objA.lastname  = @"Rossi";

myObject *objB = [myObject alloc];
objB.name      = @"Carlo";
objB.lastname  = @"Bianchi";

NSArray *elenco = [NSArray arrayWithObjects: objA, objB, nil];

[objA release];
[objB release];

Si potrebbe migliorare il codice creando un ciclo for o utilizzando un NSMutableArray per aggiungere man mano gli oggetti nel nostro elenco. Tuttavia la situazione migliorebbe di poco, in quando rimarrebbero fuori le impostazioni delle proprietà name e lastname. Verrebbe quindi spontaneo, per iniziare, aggiungere un metodo – di oggetto – initWithName che consentirebbe di passare immediatamente le impostazioni delle proprietà, semplificandoci un pochino le cose. Nel file di implementazione myObject.m aggiungiamo:

1
2
3
4
5
6
7
- (id)initWithName:(NSString *)stringName lastname:(NSString *)stringLastname {
    if ( self = [super init] ) {
        self.name = stringName;
        self.lastname = stringLastname;
     }
     return self;
}

Così facendo abbiamo migliorato la situazione, potendo ora scrivere:

1
2
3
4
5
6
7
myObject *objA = [[myObject alloc] initWithName: @"Mario" lastname: @"Rossi"];
myObject *objB = [[myObject alloc] initWithName: @"Carlo" lastname: @"Bianchi"];

NSArray *elenco = [NSArray arrayWithObjects: objA, objB, nil];

[objA release];
[objB release];

Abbiammo tuttavia ancora i puntatori objA e objB, necessari per l’inserimento nell’array e liberare la memoria. Volendo potremmo inserire direttamente la creazione di un oggetto nel popolamento dell’array, utilizzando autorelease per liberare la memoria, ma il codice sarebbe ancora non al minimo. Lasciatemi mostrare come risolvere la questione con un metodo di classe. Prima di tutto sostituiamo la nostra - (id)initWidthName con:

1
2
3
4
5
6
7
8
9
10
+ (id)initWithName:(NSString *)name lastname:(NSString *)lastname {
    myObject *item;
 
    if ( item = [[self alloc] init] ) {
        // Init
        item.name = name;
        item.lastname = lastname;
    }
    return [item autorelease];
}

Così facendo abbiamo creato un metodo di classe che alloca (in autorelase) e iniziallizza un nostro oggetto, prima di avere il puntatore all’istanza. Il codice di utilizzo diventa quindi:

1
2
3
4
NSArray *elenco = [NSArray arrayWithObjects:
    [myObject initWithName: @"Mario" lastname: @"Rossi"],
    [myObject initWithName: @"Carlo" lastname: @"Bianchi"],
    nil];

Molto, molto meglio…

Continua...



Stop SOPA