contact us

Use the form on the right to contact us.

You can edit the text in this area, and change where the contact form on the right submits to, by entering edit mode using the modes on the bottom right.

via Seradina 11/e, 25040
Cortefranca, Brescia
Italy

+39 338 3158562

MP Blog

Creare un caricamento dati per iOS

Mauro Piccini

In questa serie di articoli vedremo un esempio nel mondo reale di caricamento dati per un’applicazione basata su view controller

Problema

La nostra applicazione carica i dati da un server esterno. I dati sono recuperati in formato json (ma potrebbe essere qualunque tipo di formato). La nostra applicazione contiene diversi view controller che necessitano di caricare dati dal server. Questo tutorial richiede la conoscienza del linguaggio Objective-C e dell'ambiente XCode. Lo scopo è descrivere una soluzione ad un probema specifico. Potete torvare riferimenti agli approfondimenti all'interno del tutorial.

Tecnologie

Dove

Questo è il posto ideale per richiedere un caricamento dati. Per farlo inseriamo qui la nostra logica di caricamento. Per iniziare useremo un semplice recupero dati da string [NSString stringWithContentsOf URL:myURL]

//
-(void)viewWillAppear:(BOOL)animated {
    ...
    NSOperationQueue *q = [[NSOperationQueue alloc] init];
    MPBackgroundLoaderOperation *op = [[MPBackgroundLoaderOperation alloc] init];
    [q addOperation:op];
    ...
}

Parsing

Interpretare quanto recuperato dal server è fuori dallo scope di questo articolo. Un’implementazione basilare potrebbe contenere un semplice unboxing da json a dictionary arrays

-(void)main {
    // carichiamo i dati e impostiamo in myData
    NSDictionary *d = @{@"data":myData};
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center publishNotification:@"loaded" withUserDictionary:d];
}

Visualizzazione

Ora non ci resta altro che rappresentare questi dati appena caricati. Andremo a salvare il risultato del parsing in una property interna al controller in modo che sia facilmente accessibile

-(void)viewWillDisappear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

-(void)didReceiveData:(NSNotification *)not {
    [self reloadData:not.userInfo[@"data"]];
}

Reload

Se volessimo aggiungere una funzionalità di reload non faremmo altro che aggiungere un nuovo pulsante nella toolbar, collegarlo [self.navigationItems.rightItem = blablabla]. Nel metoto collegato richiamiamo esattamente lo stesso metodo richiamato nel viewWillAppear

-(void)viewDidLoad {
    self.navigationItem.rightItem = [[UIBarButtonItem alloc] initWithButton.....
}

e adesso?

La soluzione appena proposta ha una serie di aspetti negativi che andremo a correggere nei prossimi articoli. Sebbene in teoria funzioni bene, non tiene presente gli aspetti del mondo reale (mancanza di banda, di connessione, costo della banda, feedback all’utente)

codice

Potete trovare il codice completo di una piccola applicazione su GitHub