Vai al contenuto

Newbie: salvare plist


Messaggi raccomandati

ciao a tutti, sono un newbie assoluto per quanto riguarda programmazione objective c ma è tutto il giorno che sto impazzendo per salvare e rileggere delle impostazioni da un file plist :ghghgh: ho letto i tutorial della apple e penso di aver capito che nel plist ci posso mettere solo oggetti di un certo tipo (NSString, NSNumber...) incapsulati in certe strutture dati (NSArray, NSDictionary...) peccato che con questo codice

   NSString * error;
   NSString * rootpath        =    [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
   NSLog(@"pippo");
   NSString * plistpath    =    [rootpath stringByAppendingPathComponent:@"stato.plist"];
NSArray * valori    =    [NSArray arrayWithObjects:[NSNumber numberWithInt:1],nil];
   NSArray * chiavi    =    [NSArray arrayWithObjects:@"prova",nil];
   NSDictionary    *    plistdict    =    [NSDictionary dictionaryWithObject:valori forKey:chiavi];
   NSLog([plistdict description]);
   NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:plistdict                         
                       format:NSPropertyListXMLFormat_v1_0
                       errorDescription:&error];
   if(plistData){
    [plistData writeToFile:plistpath atomically:YES];
   }
   else{
       NSLog(error);
       [error release];
   }

ottengo questo bell'output

2011-04-22 12:42:08.669 ContaFrutti[4087:207] {
       (
       prova
   ) =     (
       1
   );
}
2011-04-22 12:42:08.675 ContaFrutti[4087:207] Property list invalid for format

vi prego aiutatemi!

Link al commento
Condividi su altri siti

non so dove tu abbia trovato quel codice ma è assurdamente complesso.

il codice corretto è questo.

	NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSString * plistpath    =    [documentsDirectory stringByAppendingPathComponent:@"stato.plist"];

NSArray *array = [NSArray arrayWithObjects:@"prova", nil];
NSLog([array description]);
[array writeToFile:plistpath atomically:YES];

NSArray *array2 = [NSArray arrayWithContentsOfFile:plistpath];
NSLog([array2 description]);

se devi usare un intero come chiave non ha senso usare i dictionary.

in ogni caso qui c'è il codice per l'nsdictionary.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSString * plistpath    =    [documentsDirectory stringByAppendingPathComponent:@"stato.plist"];

//NSArray *array = [NSArray arrayWithObjects:@"prova", nil];
NSDictionary *dict1 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"value1", nil] forKeys:[NSArray arrayWithObjects:@"chiave1", nil]];

NSLog([dict1 description]);
[dict1 writeToFile:plistpath atomically:YES];

NSArray *dict2 = [NSDictionary dictionaryWithContentsOfFile:plistpath];
NSLog([dict2 description]);

Problemi a programmare il tuo iphone? contattami

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...