Articoli con Tag ‘Apple’


iPhone FirstApp: indovina il numero – parte 1

Il primo sorgente che mi è passato tra le mani era scritto in Basic e consisteva in poche righe di codice, per me illuminanti. Era un semplice giochino che generava un numero casuale da 1 a 10 e, tramite l’input da tastiera, verificava che il numero inserito era maggione, minore o uguale al numero casuale. Nonostante la sua rozza semplicità rimane, per me, uno dei migliori esempi – semplici, divertenti e pratici – per spiegare a chi non sa nulla di programmazione cosa s’intenda effettivamente per “programma per computer”. Così ho pensato di riproporlo per Apple iPhone, magari aiuterà qualcuno…

Continua...

Objective-C: conversione dei tipi

Con alcuni linguaggi ad alto livello, come Javascript o PHP, dove i dati non sono tipizzati o comunque possono non esserlo, siamo “viziati” nel confrontare o trasformare interi e stringhe e vice versa, il tutto nascosto o manipolato dall’interprete (o compilatore). Ad esempio in Javascript esistono funzioni di “forzatura” (come parseInt() ad esempio) necessarie in particolari casi. Tuttavia in altre circostanze trattiamo gli interi senza preoccuparci di particolari conversioni (esplicite), come ad esempio:

1
2
3
var mioNumero = 5;
// ...
alert( "Il valore di mioNumero è " + mioNumero );

In Objective-C, invece, il tipo dato è importante e la conversione di tipo dev’essere esplicita. Oltra al casting (meglio typecasting) ci possiamo avvalere di funzioni e funzionalità specifiche per la conversione di tipo. Ad esempio ecco come convertire un intero in stringa:

1
2
3
4
int mioNumero = 5;
NSString *miaStringa = [NSString stringWithFormat:@"%d", mioNumero];
//
NSLog(@"miaStringa=%@ mioNumero=%i", miaStringa, mioNumero);

Al contrario, ecco come convertire una stringa in intero:

1
2
3
4
NSString *miaStringa = @"128";
int mioNumero = [miaStringa integerValue];
//
NSLog(@"miaStringa=%@ mioNumero=%i", miaStringa, mioNumero);

Continua...

iPhone code snippet: UIAlertView

La classe UIAletrView permette di mostrare una finestra modale (animata) per informare e/o chiedere qualcosa all’utente. Le UIAlterView (viste alert) sono molto comode e semplici da usare. Anche la gestione della risposta utente viene risolta intercettando l’indice del bottone premuto. Per visualizzare un semplice UIAlterView basta scrivere:

1
2
3
4
// semplice Alert con un bottone, senza callback
UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"Titolo" message:@"Messaggio" cancelButtonTitle:@"Annulla" otherButtonTitles: nil];
[myAlert show];
[myAlert release];

E’ possibile aggiungere ulteriori bottoni in otherButtonTitles:

1
2
3
4
// semplice Alert con due bottoni, senza callback
UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"Titolo" message:@"Messaggio" cancelButtonTitle:@"Annulla" otherButtonTitles:@"Ok", nil];
[myAlert show];
[myAlert release];

Per determinare quale bottone è stato premuto, basta aggiungere la delegate:self nell’inizializzazione dell’oggetto UIAlterView:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// semplice Alert con due bottoni e callback
UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"Titolo" message:@"Messaggio" delegate:self cancelButtonTitle:@"Annulla" otherButtonTitles:@"Ok", nil];
[myAlert show];
[myAlert release];

// la callback ha questa sintassi

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    switch ( buttonIndex ) {
        case 1:
            // codice
            break;
    }
}

La callback alertView deve avere necessariamente quel nome; per maggiori informazioni vedi UIAlertViewDelegate

Avendo a disposizione solo la callbck alertView:clickedButtonAtIndex, più UIAletrView punteranno sempre a quella. Utilizzando il campo tag dell’oggetto UIAletrView, possiamo determinare quale sia il “chiamante”:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// semplice Alert con due bottoni e callback
UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"Titolo" message:@"Messaggio" delegate:self cancelButtonTitle:@"Annulla" otherButtonTitles:@"Ok", nil];
myAlertA.tag = 1;
[myAlertA show];
[myAlertA release];

//
UIAlertView *myAlertB = [[UIAlertView alloc] initWithTitle:@"Titolo" message:@"Messaggio" delegate:self cancelButtonTitle:@"Annulla" otherButtonTitles:@"Ok", nil];
myAlertA.tag = 2;
[myAlertB show];
[myAlertB release];

// gestione multipla UIAlertView

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    NSLog(@"Alert Tag: %i", alertView.tag);
    NSLog(@"buttonIndex: %i", buttonIndex);
}

Continua...

Very short trick: fermare NSTimer

L’uso dei timers (NSTimer) nello sviluppo di applicazioni per Apple iPhone è molto frequente e non solo nella realizzazione di giochi. Uno dei problemi con cui ci si può scontrare è l’asincronicità del timer stesso, che può portare, durante l’arresto di uno o più timer, al crash della nostra applicazione. Quando si vuole fermare uno o più timer, nei casi in cui repeats è impostato a YES, si invoca la invalidate che, appunto, arresta il timer.

Continua...

Apple iPhone SDK 3.0: risolto baco su UIButton buttonWithType

Come indicato nel post Apple iPhone SDK 3.0: prime incompatibilità le SDK 3.0 di Apple mostrano comportamenti differenti rispetto alla release 2.2.1. Il supporto di assistenza per gli sviluppatori mi ha fornito la risposta, e quindi la soluzione al problema. La risposta del supporto tecnico è stata che [UIButton buttonWithType:] già chiama – al suo interno – la initWithFrame. Ne deriva che, sempre secondo il supporto tecnico, scrivendo:

Continua...

Da Actionscript ad Objective-C

Ho pensato che potrebbe essere utile a chi si è avvicinato da poco allo sviluppo di applicazioni per Apple iPhone, confrontare Adobe Actionscript – il linguaggio utilizzato in Adobe Flash e Adobe Flex, più diffuso tra i neo-programmatori – e Objective-C, il linguaggio utilizzato da Apple per sviluppare le sue applicazioni. Objective-C è a tutti gli effetti un linguaggio ad oggetti nel senso puro, non che Actionscript non lo sia, ma Objective-C ha sicuramente una marcia in più in quanto è un’estensione dell’ANSI C e la sua sintassi è un mix tra C/C++ e Smalltalk; è un vero OO (Object-oriented language).

Continua...

Apple iPhone SDK 3.0: prime incompatibilità

Dopo aver installato le SDK 3.0 per Apple iPhone, evidentemente ancora non perfettamente stabili, ho subito riscontrato alcuni problemi, sia nella compilazione del codice sia nell’impostazione generale di XCode. Il più importante – che ho prontamente segnalato con un “case” ad Apple, al centro sviluppatori – riguarda la creazione di bottoni tramite codice. Ecco un estratto del codice non compatibile con le SDK 3.0:

1
2
3
4
UIButton *myButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] initWithFrame:CGRectMake(0, 0, 100, 40)];
[myButton setTitle:@"Bottone" forState:UIControlStateNormal];
// altre impostazioni
[self.view addSubview:myButton];

Compilando questo codice con le SDK 2.2.1 si ottiene un classico bottone con la label “Bottone”. Con le SDK 3.0 il bottone viene creato ma la label scompare. Utilizzando come buttonWithType il tipo UIButtonTypeCustom la situazione sembra migliorare, nel senso che la label viene resa apparentemente in modo corretto. Rimane comunque strano l’improvviso malfunzionamento sul tipo UIButtonTypeRoundedRect. Sono ancora in attesa di una risposta da Apple… appena ho novità; posto!

Continua...

The First: disponibile su iTunes

Sei giorni ed AppStore ha approvato la (mia) prima applicazione per Apple iPhone!

Continua...

Hi phone

iphoneDa oggi inauguro una nuova sezione (categoria per essere corretti) dedicata allo sviluppo di applicazioni su Apple iPhone! Premetto da subito che molti degli articoli che pubblicherò avranno un “taglio” in linea con lo spirito di questo blog, cioè saranno in maggioranza per utenti avanzati. Tuttavia, come ho già fatto per altri argomenti, cercherò di essere il più chiaro possibile e, dove necessario, inserire qualche “concetto base” utile ad un pubblico più ampio.

Continua...

Very short trick: disabilitare il ridimensionamento di una textarea su Safari

In tutti i browser sviluppati partendo dal motore di rendering WebKit (come apputo Safari o Google Chrome), i campi textarea mostrano, in basso a destra, la caratteristica funzionalità di resizing. Se questa particolarità può risultare davvero utile in certi casi, in altri si trasforma in un elemento fastidioso.

Continua...



Stop SOPA