Popolare una TableView tramite Property List – plist

Ciao a tutti ragazzi dopo molte richieste riguardanti a questo argomento ho deciso di creare un tutorial quindi per prima cosa creiamo un nuovo progetto di tipo single view application

Spuntiamo le voci use storyboard e use automatic reference

Fatto ciò dobbiamo eliminare  i due file viewcontroller .h e .m poi recandoci nel file storyboard eliminiamo la vista presente nel suo interno.

Ora dobbiamo creare prima un nuovo file con sottoclasse  UITableViewController  e lo chiamiamo TableViewController poi creiamo un nuovo file di tipo property list

Ora non ci resta che popolare la nostra property list, una volta entrati nel file fare un click col tasto destro e selezioniamo add row come key gli diamo nomi e tipo array poi riempiamola come segue :

Fatto ciò dobbiamo inserire all’interno dello storyboard una tableview controller per poi settare la sua classe con quella creata da noi precedentemente e in fine settare come identifier cell

L’ultimo passo da compiere e quello di scrivere il codice quindi all’interno del file tableviewcontroller.h scriveremo quanto segue:

[code lang=”obj-c”]

#import <UIKit/UIKit.h>

@interface TableViewController : UITableViewController

@property(strong,nonatomic)NSArray *nomiArray;//dichiariamo un array

-(void)alert:(NSString*)aMassage;

-(NSArray*)leggoDallaProperty:(NSString*)NomeFile;

@end

[/code]

Mentre all’interno del file con l’estensione .m quest’altro codice :

[code lang=”obj-c”]

#import "TableViewController.h"

@implementation TableViewController
@synthesize nomiArray;
-(void)viewDidLoad{
[super viewDidLoad];
//riempiamo l’array con il contenuto della property creata Precedentemente
[self setNomiArray:[self leggoDallaProperty:@"Lista"]];
}
– (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
//crea una riga per ogni elemento all’interno della property
– (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[self nomiArray] count];
}
– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSArray *names = [[self nomiArray]
sortedArrayUsingSelector: @selector(localizedCaseInsensitiveCompare:)];
static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
[[cell textLabel] setText:[names objectAtIndex:[indexPath row]]]; return cell;
}
//indica quale riga e selezionata e passa "l’elemeto" al metodo allert
– (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES]; NSArray *names = [[self nomiArray]
sortedArrayUsingSelector: @selector(localizedCaseInsensitiveCompare:)];
[self alert:[names objectAtIndex:[indexPath row]]];
}
//metodo alertView niente di particolare
– (void)alert:(NSString *)aMessage {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hai selezionato "
message:aMessage
delegate:self cancelButtonTitle:nil
otherButtonTitles:@"OK", nil];
[alert show];
}
//Caricare l’elenco all’interno della property dalla memoria locale. Il metodo in questione (leggoDallaProperty) viene richiamato all’interno del metodo viewDidLoad.
-(NSArray*)leggoDallaProperty:(NSString*)NomeFile{
NSString *errorDesc = nil;
NSPropertyListFormat format;
NSString *plistPath = [[NSBundle mainBundle] pathForResource:NomeFile
ofType:@"plist"];
NSData *plistXML=[[NSFileManager defaultManager]contentsAtPath:plistPath];
NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves
format:&format errorDescription:&errorDesc];
return [temp objectForKey:@"nomi"];
}
[/code]

Se avete eseguito attentamente le mie istruzioni il risultato finale sarà simile a questo :