Set 04
Leggere e scrivere Dictionary, String, Array in file plist (Property List)
iPad, iPhone, MacOSX, Object-C | Soft! | Commenta l'articolo |
I file Property lists sono molto comuni per una applicazione iPhone. Vediamo uno tramite l’esempio qui sotto:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion>/key> <string>en>/string> <key>CFBundleDisplayName</key> <string>${PRODUCT_NAME}</string> <key>CFBundleIdentifier</key> <string>com.3Sixty.Test</string> <key>CFBundleName</key> <string>${PRODUCT_NAME}</string> ... <key>UISupportedInterfaceOrientations</key> <array> <string>UIInterfaceOrientationPortrait</string> <string>UIInterfaceOrientationLandscapeLeft</string> <string>UIInterfaceOrientationLandscapeRight</string> </array> </dict> </plist>
Un file di proprietà è un dizionario del tipo key-value. Nell’esempio l’ultima coppia è un array come valore dell’oggetto.
iOS prevede dei metodi semplici per gestire questo tipo di file. Ad esempio il codice qui sotto crea un dictionary contenente tre Array:
NSArray *array1 = [NSArray arrayWithObjects:@"string1", @"string2", nil]; NSArray *array2 = [NSArray arrayWithObjects:@"string3", @"string4", nil]; NSArray *array3 = [NSArray arrayWithObjects:@"string5", @"string6", nil]; NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; [dictionary setObject:array1 forKey:@"Array1"]; [dictionary setObject:array2 forKey:@"Array2"]; [dictionary setObject:array3 forKey:@"Array3"];
Serializziamo il dictionary:
NSString *error; // serializzazione NSData *data = [NSPropertyListSerialization dataFromPropertyList:dictionary ] format:NSPropertyListXMLFormat_v1_0 errorDescription:&errorString]; // cartella di destinazione NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/test.xml"]; // scrive data su file [data writeToFile:path atomically:YES];
Questo il risultato di test.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Array1</key> <array> <string>string1</string> <string>string2</string> </array> <key>Array2</key> <array> <string>string3</string> <string>string4</string> </array> <key>Array3</key> <array> <string>string5</string> <string>string6</string> </array> </dict> </plist>
Adesso facciamo l’operazione inversa, leggiamo il contenuto di un file di proprietà:
NSString *error; NSPropertyListFormat format; // Build path to the property list (xml file) NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); if ([paths count] > 0) { // The file saved previously NSString *plistPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"test.xml"]; // Check for existence of the file if ([[NSFileManager defaultManager] fileExistsAtPath:plistPath]) { // Read the file NSData *data = [NSData dataWithContentsOfFile:plistPath]; // Saved as dictionary object, so cast from id to dictionary is safe NSDictionary *plist = [NSPropertyListSerialization propertyListFromData:data mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error]; NSLog(@"plist: %@", plist); } }
Buon lavoro
Ultimi Commenti