Come molti programmatori usano fare, anch’io mi costruisco le mie librerie di funzioni pronte per essere riutilizzate in più progetti e in più contesti. Lasciatemi passare il titolo di questo post, forse un po’ azzardato ma, tuttavia, come vedremo, non lontano dalla realtà.
In Objective-C è possibile scrivere e chiamare codice C/C++, compreso l’assembly se è per questo. Questa sua caratteristica lo rende un linguaggio davvero versatile e, per certi aspetti, fenomenale. Da un lato, infatti, è possibile utilizzare e apprezzare la sintassi prettamente Objective-C, dall’altro è possibile eseguire velocemente porting di codice scritto in ANSI C (magari per Digital Unix o Sun) e utilizzarlo comodamente nelle nostre applicazioni iPhone o iPad; per non parlare di tutto il Kernel BSD già disponibile su Mac OS X!
Continua...
Restituisce il nome di un file a partire dall’oggetto NSURLRequest, permettendo di decidere se avere o meno la sue estensione:
Continua...
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...
Il MapKit framework fornisce moltissime funzionalità utili, tranne quella di restituire Longitudine e Latitudine a partire da un indirizzo. In Javascript, ad esempio, è possibile utilizzare il servizio di Geocoding fornito da Google e discusso in Google Maps: come ottenere Latitudine e Longitudine da un indirizzo. Su Apple iPhone, o iPad, è possibile tuttavia superare l’ostacolo utilizzando in modo diverso i servizi di Google. Nello specifico è possibile chiamare direttamente l’url:
1
| http://maps.google.com/maps/geo?q=[indirizzo]&output=csv |
Dove è [indirizzo] inserire la stringa con l’indirizzo che vogliamo trasformare in coordinate. L’output restituito è del tipo:
1
| 200,8,41.9128300,12.2241172 |
Il primo valore, 200, indica che tutto è andato bene (200 OK). Il secondo, 8, è il Google accuracy parameter (1-10). Gli ultimi due valori sono, finalmente, latitudine e longitudine. Vediamo adesso un possibile prototipo di un metodo da inserire nelle nostre applicazioni:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| - (CLLocationCoordinate2D )getLocationFromAddress :(NSString*)address {
NSString *urlString = [NSString stringWithFormat :@"http://maps.google.com/maps/geo?q=%@&output=csv",
[address stringByAddingPercentEscapesUsingEncoding : NSUTF8StringEncoding ]];
NSString *locationString = [[[NSString alloc ] initWithContentsOfURL :[NSURL URLWithString :urlString ]] autorelease ];
NSArray *listItems = [locationString componentsSeparatedByString :@","];
//int zoom = 0;
double latitude = 0.0;
double longitude = 0.0;
if([listItems count ] > = 4 && [[listItems objectAtIndex :0] isEqualToString :@"200"]) {
//zoom = [[listItems objectAtIndex:1] intValue];
latitude = [[listItems objectAtIndex :2] doubleValue ];
longitude = [[listItems objectAtIndex :3] doubleValue ];
} else {
// Errore
}
CLLocationCoordinate2D location;
location.latitude = latitude;
location.longitude = longitude;
return location;
} |
Note interessanti
La stringa restituita in locationString viene “splittata” tramite il metodo componentsSeparatedByString, alla stregua della funzione explode() del PHP per intenderci. Nell’esempio da me proposto ho inserito – ma commentato – il codice per recuperare anche il Google accuracy parameter, o fattore di scala di precisione, indicato con zoom.
Sorgente esempio
Per completezza ho realizzato un piccolo applicativo di esempio con il quale è possibile provare il metodo sopra proposto; inserite un qualsiasi indirizzo e iPhone lo mostrerà sulla mappa.

Scarica Sorgente
Ringrazio il team di devAPP per l’ispirazione di questo articolo.
Continua...
Ultimi Commenti
Giovambattista Fazioli: @Nik: Sono contento! In bocca al lupo dunque!!
Nik: Lunedì ho l’esame di informatica su java, grazie mi sei stato utilissimo, il libro che ho era poco chiaro...
Marco: Ti ringrazio moltissimo, mi hai illuminato
ho risolto impostando [cc_objc] //OptionViewController.m -...
Giovambattista Fazioli: @Marco: Ti consiglio un approccio credo più corretto. Se hai eseguito il subclass del tab...
luigi: molto chiaro e semplice devo ammettere che anche scrivendo da un pà difficilmente uso delegati creati da...