Ago 13
Molto spesso accade di dover riscrivere le stesse informazioni più volte, perchè non si vuole pensare ad soluzione definitiva, ma piuttosto si preferisce lavorare con metodi semplici e ripetitivi.
Un esempio è dover scrivere la versione di una applicazione in più punti nel codice.
Un modo semplice e indolore è quello di leggere il suo valore in un punto solamente, come può essere dal file Info.plist.
Per fare questo basta copiare questo pezzo di codice:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"]; NSDictionary* plistDictionary = [[NSDictionary alloc] initWithContentsOfFile:filePath]; NSString *value = [plistDictionary objectForKey:@"CFBundleVersion"];
La variabile value contiene la versione della nostra applicazione e può essere utilizzata ovunque.
Fornisco anche una serie di metodi da utilizzare per qualsiasi file plist, in lettura e scrittura:
- (id)readPlist:(NSString *)fileName { NSData *plistData; NSString *error; NSPropertyListFormat format; id plist; NSString *localizedPath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"plist"]; plistData = [NSData dataWithContentsOfFile:localizedPath]; plist = [NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error]; if (!plist) { NSLog(@"Error reading plist from file '%s', error = '%s'", [localizedPath UTF8String], [error UTF8String]); [error release]; } return plist; }
- (NSArray *)getArray:(NSString *)fileName { return (NSArray *)[self readPlist:fileName]; } - (NSDictionary *)getDictionary:(NSString *)fileName { return (NSDictionary *)[self readPlist:fileName]; }
- (void)writePlist:(id)plist fileName:(NSString *)fileName { NSData *xmlData; NSString *error; NSString *localizedPath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"plist"]; xmlData = [NSPropertyListSerialization dataFromPropertyList:plist format:NSPropertyListXMLFormat_v1_0 errorDescription:&error]; if (xmlData) { [xmlData writeToFile:localizedPath atomically:YES]; } else { NSLog(@"Error writing plist to file '%s', error = '%s'", [localizedPath UTF8String], [error UTF8String]); [error release]; } }
Buon divertimento.
Ultimi Commenti