2012-02-20 13 views
5

Sono nuovo in iPhone, voglio salvare i dati in NSMutableArray plist il file il mio codice è:Come salvare NSMutableArray in plist in iphone

NSArray *array = [[NSArray alloc] initWithArray:self.artistDetailsArray]; 
[self.artistDetailsArray writeToFile:self.path atomically:YES]; 

ma mostra 0 elemento nel mio percorso plist. per favore aiutatemi.

Grazie in anticipo:

seguenti è il mio codice per memorizzare i dati in plist e NSUserDefault. nessuno di questi funziona per NSMutableArray/NSArray ma funziona per NSString. C'è un limite massimo di dimensioni per memorizzare in plist o UserDefault ?? NSMutableArray contiene solo testo/set di NSDictionary.

per favore suggerirmi.

- (void)initialiseDataFromLocalStorage 
{ 
     NSFileManager *fileManager = [NSFileManager defaultManager]; 
     NSError *error; 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     self.path = [documentsDirectory stringByAppendingPathComponent:@"saveLogin.plist"]; 
     if ([fileManager fileExistsAtPath:self.path] == NO) { 
       NSString *pathToDefaultPlist = [[NSBundle mainBundle] pathForResource:@"saveLogin" ofType:@"plist"]; 
       if ([fileManager copyItemAtPath:pathToDefaultPlist toPath:self.path error:&error] == NO) { 
         NSAssert1(0,@"Failed with error '%@'.", [error localizedDescription]); 
       } 
     } 

    // To get stored value from .plist 
     NSDictionary *dict = [[NSDictionary alloc]initWithContentsOfFile:self.path]; 
     self.ResumedataDictionary = [[NSMutableDictionary alloc]initWithDictionary:dict]; 
     [dict release]; 
    self.artistDetailsArray = [[NSMutableArray alloc] initWithArray:[self.ResumedataDictionary objectForKey:@"artistDetailsDict"]];  
    // To get stored value from NSUserDefault 
    NSUserDefaults *fetchData = [NSUserDefaults standardUserDefaults]; 
    self.artistDetailsArray = [fetchData objectForKey:@"artistDetailsDict"];  
}   

-(void)saveDataToLocalStorage 
{  
    // To store value into .plist 
    NSArray *array = [[NSArray alloc] initWithArray:self.artistDetailsArray]; 
    [ResumedataDictionary setObject:array forKey:@"artistDetailsDict"]; 
     [ResumedataDictionary writeToFile:self.path atomically:YES]; 

    // To store value into NSUserDefault 
    NSUserDefaults *fetchData = [NSUserDefaults standardUserDefaults]; 
    [fetchData setObject:self.artistDetailsArray forKey:@"artistDetailsDict"];  
} 

risposta

0
NSData *serializedData; 
     NSString *error; 
     serializedData = [NSPropertyListSerialization dataFromPropertyList:YourArray(You can use dictionaries.strings..and others too) 
     format:NSPropertyListXMLFormat_v1_0 errorDescription:&error]; 
     if (serializedData) { 
     // Serialization was successful, write the data to the file system // Get an array of paths. 

     NSArray *documentDirectoryPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *docDir = [NSString stringWithFormat:@”%@/serialized.xml”, 
     [documentDirectoryPath objectAtIndex:0]]; 
     [serializedData writeToFile:docDir atomically:YES]; 
} 
     else { 
     // An error has occurred, log it 
     NSLog(@”Error: %@”,error); } 
     } 
4

un'occhiata a questo codice che crea percorso plist nella directory documenti:

NSError *error; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //1 
NSString *documentsDirectory = [paths objectAtIndex:0]; //2 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"data.plist"]; //3 

NSFileManager *fileManager = [NSFileManager defaultManager]; 

if (![fileManager fileExistsAtPath: path]) //4 
{ 
NSString *bundle = [[NSBundle mainBundle] pathForResource:@”data” ofType:@”plist”]; //5 

[fileManager copyItemAtPath:bundle toPath: path error:&error]; //6 
} 

1) Creare un elenco di percorsi.

2) Ottieni un percorso dalla directory dei documenti dall'elenco.

3) Creare un percorso file completo.

4) Verificare se il file esiste.

5) Ottieni un percorso per il plist creato prima nella directory del pacchetto (da Xcode).

6) Copia questo plist nella directory dei documenti.

prossima lettura dei dati: i dati

NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile: path]; 

//load from savedStock example int value 
int value; 
value = [[savedStock objectForKey:@"value"] intValue]; 

[savedStock release]; 

scrittura:

NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: path]; 

//here add elements to data file and write data to file 
int value = 5; 

[data setObject:[NSNumber numberWithInt:value] forKey:@”value”]; 

[data writeToFile: path atomically:YES]; 
[data release] 
+1

Ciao Neon, Grazie per la pronta risposta. Ho usato lo stesso codice e funziona per il valore NSString ma non per NSMutableArray o NSArray. Qualche suggerimento ??? :( – iPhone4s

5
NSMutableArray *array=[[NSMutableArray alloc] init]; 
    [array addObject:@"test"]; 
    [array writeToFile:@"/Users/parag/test.plist" atomically:YES]; 
    [array release]; 

o

NSMutableArray *array=[[NSMutableArray alloc] init]; 
[array addObject:@"test121"]; 
id plist = [NSPropertyListSerialization dataFromPropertyList:(id)array       format:NSPropertyListXMLFormat_v1_0 errorDescription:@error]; 


[plist writeToFile:@"/Users/parag/test.plist" atomically:YES]; 

Date un'occhiata a Creating Property Lists Programmatically

3

È possibile utilizzare elenchi di proprietà (NSPropertyListSerialization o writeToFile: way). Accertarsi tuttavia che la matrice contenga solo oggetti elenco di proprietà validi (oggetti NSString, NSNumber, NSData, NSArray o NSDictionary) e che NSDictionary disponga solo di chiavi NSString. Gli oggetti (complessi) personalizzati devono essere rappresentati come dizionari.

Oppure utilizzare l'approccio con gli archivi http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Archiving/Archiving.html tramite il protocollo NSCoding. Bella guida è qui http://cocoadevcentral.com/articles/000084.php

Problemi correlati