Home / Programmazione / Objective-C / Riempire UIPickerView da file di testo
Mattepuffo

Riempire UIPickerView da file di testo

Riempire UIPickerView da file di testo

Abbiamo visto come riempire le UIPickerView usando sia un NSArray sia usando un NSDictionary.

Abbiamo anche visto che leggere un file di testo.

A questo punto mettiamo tutto insieme: da un file di testo riempiamo l'NSDictionary che viene usato dal nostro UIPickerView.

Il file di testo sarà una cosa del genere:

s.c.c. a r.l.;Società Cooperativa Consortile a responsabilità limitata
S.p.A.;Società per Azioni
N.A.;National Association
Cons. a.e.;Consorzio con attività esterna
Cons.;Consorzio
S.c.r.l.;Società Cooperativa responsabilità limitata
soc. consort. n c.;Società Consortile in nome collettivo
coop. soc.;Cooperativa sociale
p. soc. coop.;Piccola Società Cooperativa
s.r.l. unico socio;Società a responsabilità limitata con unico socio
soc. coop. agricola;Società Cooperativa Agricola
S.p.A. Socio Unico;Società per Azioni con Socio Unico
s.r.l. unipersonale;Società unipersonale a responsabilità limitata
L.L.C.;Limited Liability Company
s.a.s.;Società in accomandita semplice
soc. coop. p.A. r.l.;Società cooperativa per Azioni a responsabilità limitata
Soc. Mutua Ass.;Società di Mutua Assicurazione
Cons. a gar. l.;Consorzio a garanzia limitata
Ente Morale;Ente Morale
GmbH;Geselschaft mit Beschränkter Haftung

In pratica ogni riga la spezziamo al punto e virgola e la parte di sinstra sarà la chiave, mentre quella di stra il valore visto sullo schermo.

Prima di tutto aggiungete il file al progetto.

Poi questo sarà il file .h:

#import <UIKit/UIKit.h>

@interface ControllerAziendaReg : UIViewController {    
    NSMutableDictionary *dictionaryForma;
    NSArray *splitArray;
    NSMutableArray *keysForma;
    NSMutableArray *objectsForma;
    NSString *fileTxt;
    NSString *textFromFile;
    UIActionSheet *sheetForma;
}

@property (retain, nonatomic) IBOutlet UIPickerView *pickerForma;

@end

Il file .m ve lo spezzo in modo da rendere più chiaro il tutto.

Prima di tutto il metodo viewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSError *err = nil;
    fileTxt = [[NSBundle mainBundle] pathForResource: @"forma" ofType: @"txt"];
    textFromFile = [[NSString alloc] initWithContentsOfFile:fileTxt encoding:NSASCIIStringEncoding error:&err];
    splitArray = [textFromFile componentsSeparatedByString:@"\n"];
    keysForma = [NSMutableArray array];
    objectsForma = [NSMutableArray array];
    for(int i = 0; i < [splitArray count]; i++) {
        NSString *s = [splitArray objectAtIndex:i];
        NSString *pre = [s substringToIndex:[s rangeOfString:@";"].location];
        NSString *sub = [s substringFromIndex:[s rangeOfString:@";"].location + 1];
        [keysForma addObject:pre];
        [objectsForma addObject:sub];
    }
    dictionaryForma = [NSDictionary dictionaryWithObjects:objectsForma forKeys:keysForma];
}

Prendiamo il file, lo leggiamo e riempiamo l'NSArray splitArray.

Per ogni valore dell'array creaimo una NSString che verrà poi splittata in corrispondenza del punto e virgola.

Poi riempiamo i due NSMutableArray, il primo con i valori di sinitra, il secondo con quelli di destra.

Fuori dal ciclo aggiungiamo gli array come valori dell'NSDictionary.

A questo punto la parte finale, i metodi specifi dell'UIPickerView:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    return [dictionaryForma objectForKey:[keysForma objectAtIndex:row]];
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    return [keysForma count];
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Attenzione" message:[keysForma objectAtIndex:row] delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
    [alert show];
}

Più o meno uguale agli articoli precedenti.