iOS Nueva matriz en plist con nueva key sobrescribe matriz antigua con key diferente

Estoy usando el siguiente código para agregar una nueva matriz en un plist, pero cada vez que agrego una nueva matriz con el campo de text en mi aplicación, sobrescribe la antigua aunque tenga una nueva key … ¿alguna idea?

- (IBAction)saveViewerItems { // get paths from root direcory NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); // get documents path NSString *documentsPath = [paths objectAtIndex:0]; // get the path to our Data/plist file NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"Data.plist"]; // set the variables to the values in the text fields self.data = [[NSMutableArray alloc] initWithCapacity:20]; // create dictionary with values in UITextFields NSDictionary *plistDict = [NSDictionary dictionaryWithObjects: [NSArray arrayWithObjects: data, nil] forKeys:[NSArray arrayWithObjects: (@"%@", text), nil]]; NSString *error = nil; // create NSData from dictionary NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:plistDict format:NSPropertyListXMLFormat_v1_0 errorDescription:&error]; // check is plistData exists if(plistData) { // write plistData to our Data.plist file [plistData writeToFile:plistPath atomically:YES]; } } 

Para get el dictionaty ya en el file, use:

 NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithContentsOfFile:(NSString *)filePath]; 

Para escribir otra matriz en ese dictionary (usando una key diferente), use:

 [dictionary setObject:(id)myArray forKey:(NSString *)myKey]; 

Para volver a escribir en el file, utilice:

 [dictionary writeToFile:(NSString *)filePath atomically:YES]; 

No es necesario usar la class NSData . Para get más información, echa un vistazo a Apple NSDictionary Class

Prueba esta

  // get paths from root direcory NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); // get documents path NSString *documentsPath = [paths objectAtIndex:0]; // get the path to our Data/plist file NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"Data.plist"]; NSMutableDictionary *plist = [[NSDictionary dictionaryWithContentsOfFile:plistPath] mutableCopy]; // set the variables to the values in the text fields self.data = [[NSMutableArray alloc] initWithCapacity:20]; [plist setObject:[NSArray arrayWithObjects: data, nil] forKey:forKeys:[NSArray arrayWithObjects: (@"%@", text)]; [plist writeToFile:path atomically:YES]; [plist release];