将一组新数据写入Plist,而不是覆盖它

我试图让一个plist来存储多组数据,但是每次保存(使用ActionSheet中的一个button),它都会覆盖之前的一组数据。 我想添加多个“朋友”和他们的数据。 我不太喜欢使用核心数据,所以我想知道如何用Plist做到这一点。

这里是保存button的代码:

NSMutableDictionary *friend = [[NSMutableDictionary alloc] init]; NSMutableDictionary *array = [[NSMutableDictionary alloc]init]; [array setObject:friendName.text forKey:@"Name"]; [array setObject:friendPhone.text forKey:@"Phone Number"]; [array setObject:friendEmail.text forKey:@"Email Address"]; [array setObject:friendChatSN.text forKey:@"Chat Screen Name"]; [friend setValue:array forKey: @"Friend Data"]; NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"FriendList.plist"]; [friend writeToFile:plistPath atomically: TRUE]; 

而不是覆盖它,我怎样才能修改代码添加一组新的朋友数据每次我保存?

这里pListperformance为一个对象。 所以每当你尝试写一些东西来plist它将被replace为新的数据。

看起来你想保存多个朋友logging到plist文件。 最好的解决scheme是使用核心数据或sqlite。 但是如果你想用plist来实现它,那么首先从plist获取旧数据,然后将新数据(好友)添加到旧数据,然后保存到plist就可以解决。

根据您的要求,您应该将NSArray与多个NSDictionary (朋友logging)对象保存到pList。

这是修改的代码

 NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"FriendList.plist"]; NSMutableArray *friend = [NSMutableArray arrayWithContentsOfFile:plistPath]; if (nil == friend) { friend = [[NSMutableArray alloc] initWithCapacity:0]; } else { [friend retain]; } NSMutableDictionary *array = [[NSMutableDictionary alloc]init]; [array setObject:friendName.text forKey:@"Name"]; [array setObject:friendPhone.text forKey:@"Phone Number"]; [array setObject:friendEmail.text forKey:@"Email Address"]; [array setObject:friendChatSN.text forKey:@"Chat Screen Name"]; [friend addObject:array]; [array release]; [friend writeToFile:plistPath atomically: TRUE]; [friend release]; 

而不是[friend setValue:array forKey:@“Friend Data”]; 使用一个唯一的密钥来代替@“朋友数据”,比如朋友名字+姓氏(至less是…),或者您的字典中每次只有一个条目。